在阅读了SO和good article之后,我仍然不太了解局部变量的范围。我也读过本·阿尔曼的这个好article。
function foo(){
var i=0;
console.log(++i);
}
foo(); //1
foo(); //1
//##################
var foo = function(){
var i=0;
console.log(++i);
};
var x = foo;
x(); //1
x(); //1
//##################
function foo2(){
var i = 0;
return function(){
console.log(++i);
};
}
var x = foo2();
x(); //1
x(); //2 -- I don't get this

为什么在第三个例子中,似乎我可以有一个单例函数,在调用它几次后使用相同的公共内部变量,即使它调用i=0
?
答案 0 :(得分:3)
因为您正在多次调用内部函数,而主函数和主函数(foo2)仅执行了一旦。因此,没有重置发生,我不断增加。
因此foo2()
被调用一次而内部函数被调用两次。
var x = foo2();
当你这样做时,我被初始化为0
并返回一个函数。请注意,您不再触及此功能,只使用返回的功能。
x();
该行执行返回的函数,只执行行
console.log(++i);
x();
再次相同。