我正在阅读关于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是一个局部自由变量。但是上面关于自由变量的概念说自由变量不是在本地声明的。我对此感到困惑。
答案 0 :(得分:0)
在这种情况下,正确的术语是locally declared variable
(numberGenerator()的本地名称)。
这个定义可以帮助你理解一个闭包:
闭包是函数的局部变量 - 在...后保持活动状态 功能已经恢复。
答案 1 :(得分:0)
不确定你的问题是什么,但num只能在封闭中被认为是"私人" numberGenerator的变量。
答案 2 :(得分:0)
因此num
是numberGenerator()
函数的本地。如果您尝试在此函数之外访问或使用它,则会返回错误。检查下面的代码,在最后一行,我有console.log()
并使用了num
,但是它会抛出错误并且不会给出任何值,因为num
是{{1}的本地功能,只能在其中使用:
numberGenerator()