let foo = () => {
let a = 111;
return {
fn: function() {
console.log(this);
a = 222;
},
num: function() {
console.log(this);
console.log(a);
}
};
};
let ins = foo();
ins.fn();
ins.num(); // 222
能否有高手能解答一下,为什么num方法能够访问到fn方法内的变量a?
我自己的思路是,首先执行fn方法,则在fn方法中存在一个值为222的变量a;然后执行num方法,函数体中要输出变量a,首先在num方法当前作用域中寻找,没有找到,然后在上一级作用域foo内找,找到变量a,返回输出111。
可是实践后,返回222,这是什么原因呢?
猜测:按照之前的推理,fn中的变量a覆盖了foo中的变量a,可是找不到理由解释fn中的变量a覆盖foo中的变量a。fn中的变量a不是应该只存在于fn方法中么,为什么可以覆盖?
希望有知道输出222原因的伙伴指点一下,感激不尽!
慕勒3428872
相关分类