2014-01-27 16 views
0

我學習瓶蓋,發現下面的示例代碼遞增「私有」變量命名計數:傳遞變量作爲參數,在封閉

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

有人可以解釋爲什麼會發生這種情況嗎?

瓶蓋內,count現指參數function(count) {。由於您在調用函數時沒有傳遞任何參數,因此countundefined,並在NaN中添加了一個數字給undefined結果。

當我嘗試用傳遞變量作爲參數傳遞給嵌套函數

需要明確的是:count參數無關與所述所定義的count可變外部功能。你沒有通過變量作爲參數,因爲你不是的調用的功能,你是定義爲它。

0

這是因爲內部函數現在可以訪問更多的局部變量,所以它不會查看它可以訪問「count」變量的任何閉包。沒有任何東西被傳遞,所以計數是未定義的。

本答案可能有用:Scope Chain in Javascript