我正在研究闭包,并找到了以下用于递增名为count的“私有”变量的示例代码:
function setup() {
var count = 0;
return function() {
count += 1;
console.log(count);
}
};
var next = setup();
next();
这对我有意义。但是,当我尝试将变量作为参数传递给嵌套函数时,next()将'NaN'记录到控制台。例如:
function setup() {
var count = 0;
return function(count) {
count += 1;
console.log(count);
}
};
var next = setup();
next();
有人可以解释为什么会这样吗?
答案 0 :(得分:2)
有人可以解释为什么会这样吗?
在闭包内,count
现在引用参数,function(count) {
。由于您在调用该函数时未传递任何参数,count
为undefined
并且向undefined
添加一个数字会导致NaN
。
当我尝试将变量作为参数传递给嵌套函数
时
要明确: count
参数与在此定义的count
变量无关外在的功能。您没有将变量作为参数传递,因为您不是调用函数,而是定义它。
答案 1 :(得分:0)
这是因为内部函数现在可以访问更多局部变量,因此它不会查看它可以访问“count”变量的任何闭包。什么都没有通过,所以数量是不确定的。
这个答案可能有用:Scope Chain in Javascript