程序代码如下:
let nAdd;
let t = () => {
let n = 99;
nAdd = () => {
n++;
};
let t2 = () => {
console.log(n);
};
return t2;
};
let a1 = t();
let a2 = t();
nAdd();
a1(); //99
a2(); //100
a2()结果的值用闭包的原理可以解释的通,因为nAdd在函数外面,在函数里面引用,nAdd引用了变量n,导致n不会被回收,也就是闭包里面保存局部变量的作用。可是为什么a1一直是返回99呢?
nAdd
是全局变量重复赋值会覆盖 所以a2
里的nAdd
覆盖了a1
的nAdd
n
是局部变量,这里nAdd
里的n++
是a2
的n