2012-06-08 26 views
2

可能重複:
In JavaScript, does it make a difference if I call a function with parentheses?何時在回調函數名稱後面使用()?

就是這之間的區別:這

$("a").on("click", anotherFunction); 

$("a").on("click", anotherFunction()); 

而且有沒有辦法讓沒有匿名函數的最後一個自我可執行文件?

+2

我想你想要這樣的:'$( 'A')上( '點擊',anotherFunction).triggerHandler(」。點擊');'。所以該函數變成了點擊處理程序*,並且也立即被調用。 –

回答

3

第一個通過實際功能;第二個傳遞函數的返回值。

我不清楚你最終的問題的含義。

+0

我想OP會立即調用這個函數,除了將它綁定到click事件。 –

+0

嗯。如果是這樣的話,我會建議分開兩個:'anotherFunction(); $(「a」)。on(「click」,anotherFunction);' –

+0

jQuery有一個'.triggerHandler()'方法。 –

1

anotherFunction是對函數的引用。 anotherFunction()是沒有參數評估的函數(因此沒有參考anotherFunction)。如果該函數返回另一個函數,那麼您希望調用函數以在函數期望的地方傳遞的唯一原因。

+0

「,因此沒有提及'anotherFunction'」 - 這不是真的,因爲即使沒有參數,參數仍然存在,並且arguments.callee是函數。 –

1

anotherFunction本身就是對函數本身的引用。

anotherFunction()調用函數並返回函數返回的結果。

這是一個非常巨大的差異。

這就像之間的區別:

function test() { 
    alert("Hello!"); 
} 
setTimeout(test,1000); // called after one second 
setTimeout(test(),1000); // called immediately, timeout fails. 
+0

不,在那個'anotherFunction'中只有當鏈接被點擊時纔會被調用。另一個例子會調用該函數一次,如果您點擊鏈接,則不會發生任何事情。 –

+0

糟糕!抱歉,是我的錯。我想知道'setTimeout(test(),1000);'會失敗超時,但如果例如'somefunction('arg',callback())',那麼回調會在main函數執行完成之前運行嗎? –

+0

是的,回調會在* somefunction之前運行,並且它的返回值將被用作參數。 –

0

您應該使用的第一個。這是因爲()執行之前定義的函數。如果您使用第一個,則只有在您需要時調用另一個函數。 JQuery會做類似anotherFunction的事情(在一個var名爲callback中)callback()

0

區別在於傳遞函數引用和調用該函數。

第一種情況(可能是正確的)意思是:事件發生時調用這個函數。

第二個將被解釋爲:立即調用此函數並使用返回的任何內容作爲回調。最好是我可以稍後調用的函數。

如下後一種情況只會工作,如果該函數定義:

function anotherFunction() { 
    return function() { 
     //real handler 
    } 
} 
相關問題