2013-03-01 54 views
1

爲什麼這不火:JavaScript的關閉問題

var counter = function() { 

    return function() { 
     alert('Fire!'); 
    } 
} 

counter(); 

但確實:

var counter = function() { 

    return function() { 
     alert('Fire!'); 
    } 
} 

var test = counter(); 
test(); 

好像給一個變量分配功能,使差別,但爲什麼呢?

+1

您需要在創建後調用該函數。正如你在第二個代碼中所做的那樣。 – 2013-03-01 07:06:55

+0

這不是一個真正的封閉問題。這只是一個使用函數對象的問題。 – 2013-03-01 07:22:07

回答

3

嘗試調用該函數返回

counter()(); 
2

您正在返回一個函數。你也必須調用它。

2

count()返回一個函數。它確實觸發了,它不會調用它返回的函數。在第二個示例中,您將返回內部函數,然後通過test()啓動它。如果您希望示例類似,請將test = count()更改爲test = counter

0

確定你的第一個例子,你要分配

function() { 
    alert('Fire!'); 
} 

的變量。但不要求它的價值。在你的第二個例子中,你將函數賦給變量,然後你調用它。

0
var counter = function() { 
     alert('Fire!'); 
} 

counter(); 

這將火

+0

所以'counter()()','alert'會被觸發。 – yuwang 2013-03-01 07:06:24

+1

不!它會寫,因爲它會開火!例如:http://jsfiddle.net/nucpb/2/ – Jacob 2013-03-01 07:07:57

+0

哦,謝謝你找出這個。 – yuwang 2013-03-01 07:11:17

0

在你的代碼

var counter = function() { 

    return function() { 
     alert('Fire!'); 
    } 
} 

counter(); 

你是簡單的得到一個功能計數器的回報率()。這就像調用一個返回值的函數並且你沒有捕獲它。

你必須抓住返回函數,然後像在第二個代碼中那樣調用它。