2017-02-25 85 views
1

我見過的JavaScript,看起來像這樣:匿名函數是否必須使用括號括起來?

function() { 
    // do something 
}() 

,最近這樣的事情:

(function() { 
    // do something 
})() 

有什麼區別?兩者都立即執行正確?

編輯:
關於第一個例子中的注意事項。該函數從另一個應用程序傳遞給瀏覽器,所以從我的結尾沒有錯誤。在瀏覽器中運行時發生錯誤。在挖掘之後,我發現應用程序API正在將該函數傳遞給eval。上面的兩個例子都適用於我,這就是爲什麼我問這個問題。

+3

這些都不是立即執行的。 – JJJ

+0

它們都沒有執行,因爲它們中沒有一個在您的示例中被調用。你需要提供更多的上下文代碼,你的模糊不清。此外,這個問題已經被多次詢問和回答。請做一些研究。 – Tomalak

+1

請記住函數fn(){}()'在JS中的語法不正確。要立即執行函數,請使用IIFE'(function(){})()'或使用函數表達式 – Rajesh

回答

3

這兩個函數都不會立即執行。立即調用的函數表達式在其末尾具有圓括號以及。像這樣:

(function() { 
 
    console.log("not hello"); 
 
}); 
 

 
(function() { 
 
    console.log("hello"); 
 
})(); 
 
//^^

括號包圍功能把它轉化爲它返回函數本身的表達式。然後,您只需使用()調用返回值(這是函數)。看看IIFE

編輯:您的編輯之後,第一個函數將只是把SyntaxError: Unexpected token (

相關問題