javascript - 函数表达式和声明中的局部变量的范围

时间:2017-08-11 09:16:36

标签: javascript scope local-variables

在阅读了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

1 个答案:

答案 0 :(得分:3)

因为您正在多次调用内部函数,而主函数主函数(foo2)仅执行了一旦。因此,没有重置发生,我不断增加。

因此foo2()被调用一次而内部函数被调用两次。

var x = foo2();

当你这样做时,我被初始化为0并返回一个函数。请注意,您不再触及此功能,只使用返回的功能。

   x();

该行执行返回的函数,只执行行

console.log(++i);

x(); 

再次相同。