,我會盡量給你的代碼一個不錯的解釋權:
function counter() {
var count = 0;
// By calling the function counter (adding a '()' after its name) you are returning a brand new anonymous function
return function() { // **Reference 1**
alert(count++);
}
}
// Here, the count variable is actually the anonymous function you returned in the **Reference 1**
var count = counter();
// In this line, you are calling the anonymous function (adding the '()' after its new name 'count')
count();
上述解釋解釋爲什麼這個工程。因爲,首先你調用了一個函數,它返回一個匿名函數並將其分配給變量計數。然後你通過在其名稱後面加上'()'來調用該函數,該函數執行alert(count++)
現在,爲什麼其他示例不起作用?我想,現在是很明顯:
var count = function() {
var count = 0;
return function() { // **Reference 2**
alert(count++);
}
};
// Here you are calling the count function which returns the anonymous function in the line **Reference 2**.
count(); // So, long story short, this call only returns the anonymous function.
你應該嘗試第二「()」後增加:count()();
。這應該也可以,因爲第一個'()'返回匿名函數,第二個執行返回的匿名函數。
希望這會有所幫助!
非常感謝大家,所有的答案都很有幫助,我只是很感激在這裏額外付出代價,並在代碼中解釋答案,我現在完全明白了。 – SeptimaEspada
很棒@SeptimaEspada。這是一個非常簡單的概念,對於Javascript高級編程非常有用。非常樂意幫助你! :) – wilsotobianco