function outer() {
var n = 999;
nAdd = function() { n++; };
function fun() { return n; }
return fun;
}
var result1 = outer();
var result2 = outer();
console.log(result1());//999
console.log(result2());//999
nAdd();
console.log(result1());//999
console.log(result2());//1000
不明白,,第三个输出不应该也是1000吗??
你的代码执行应该是产生了两个闭包。
var n = 999;属于函数的作用域。 nAdd函数里面的n始终指向result2产生的闭包。
每次调用 outer()
都会产生一个新的作用域,所以 result1
和 result2
所对应的 n
是不一样的。
刚刚说错了,我懂了,正如上面的同志说的。因为取得那个 n 都是 各自 函数定义域里面的那个 n , 而nAdd()执行的其实是 result2里面的那个 nAdd,因为第一次被第二的给覆盖掉了。所以 nAdd其实加的是 result2里面的那个n,而第一个里面的那个n并没有加。所以 result1个弹出来的还是 999,它作用域里面的n并没有加1;result2里面的才加了1,所以n===1000