自由变量和局部自由变量之间的差异

时间:2017-07-26 09:29:41

标签: javascript closures

我正在阅读关于javascript closure的教程。有一个名为free variables的概念。自由变量是既不是本地声明也不作为参数传递的变量。

教程的第一个例子:



function numberGenerator() {
  // Local “free” variable that ends up within the closure
  var num = 1;
  function checkNumber() { 
    console.log(num);
  }
  num++;
  return checkNumber;
}

var number = numberGenerator();
number();




在这个例子中,注释说num是一个局部自由变量。但是上面关于自由变量的概念说自由变量不是在本地声明的。我对此感到困惑。

3 个答案:

答案 0 :(得分:0)

在这种情况下,正确的术语是locally declared variable(numberGenerator()的本地名称)。

这个定义可以帮助你理解一个闭包:

  

闭包是函数的局部变量 - 在...后保持活动状态   功能已经恢复。

答案 1 :(得分:0)

不确定你的问题是什么,但num只能在封闭中被认为是"私人" numberGenerator的变量。

答案 2 :(得分:0)

因此numnumberGenerator()函数的本地。如果您尝试在此函数之外访问或使用它,则会返回错误。检查下面的代码,在最后一行,我有console.log()并使用了num,但是它会抛出错误并且不会给出任何值,因为num是{{1}的本地功能,只能在其中使用:

numberGenerator()