在闭包中将变量作为参数传递

时间:2014-01-27 00:27:38

标签: javascript arguments closures

我正在研究闭包,并找到了以下用于递增名为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();

有人可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

  

有人可以解释为什么会这样吗?

在闭包内,count现在引用参数function(count) {。由于您在调用该函数时未传递任何参数,countundefined并且向undefined添加一个数字会导致NaN

  

当我尝试将变量作为参数传递给嵌套函数

要明确: count 参数与在此定义的count 变量无关外在的功能。您没有将变量作为参数传递,因为您不是调用函数,而是定义它。

答案 1 :(得分:0)

这是因为内部函数现在可以访问更多局部变量,因此它不会查看它可以访问“count”变量的任何闭包。什么都没有通过,所以数量是不确定的。

这个答案可能有用:Scope Chain in Javascript