2013-02-18 158 views
0

爲什麼函數聲明需要被包裝在括號中以便立即調用?我很好奇,解釋器如何在包裝在圓括號中時讀取立即調用的函數。JavaScript即時函數調用 - 爲什麼函數需要括號?

I.e.

我爲什麼必須這樣做......

(function() { 
    // Logic 
})(); 

,而不是這個......

function() { 
    // Logic 
}(); 
+1

第二個是允許表達式允許的地方,例如, 'var x = function(){return'foo'}();' – RobG 2013-02-18 03:36:28

回答

6

當一個函數被包裹在括號它解析爲一個表達式 - 函數表達式。否則沒有它們,它被解析爲函數聲明。函數聲明需要一個名稱,它看起來沒有給出它,這又會導致語法錯誤。此外,您不能將()內聯應用於函數聲明以調用它。空括號是一個語法錯誤,但是非空括號是一個將與函數分開計算的表達式。

+2

'function foo(){}(bar);'雖然是有效的,但它不會做你想要的。 – 2013-02-18 00:43:11

+0

非常好的答案,謝謝。 – contactmatt 2013-02-18 17:39:01

+0

@FelixKling,你的例子會做什麼? – contactmatt 2013-02-18 17:41:26

相關問題