爲什麼函數聲明需要被包裝在括號中以便立即調用?我很好奇,解釋器如何在包裝在圓括號中時讀取立即調用的函數。JavaScript即時函數調用 - 爲什麼函數需要括號?
I.e.
我爲什麼必須這樣做......
(function() {
// Logic
})();
,而不是這個......
function() {
// Logic
}();
爲什麼函數聲明需要被包裝在括號中以便立即調用?我很好奇,解釋器如何在包裝在圓括號中時讀取立即調用的函數。JavaScript即時函數調用 - 爲什麼函數需要括號?
I.e.
我爲什麼必須這樣做......
(function() {
// Logic
})();
,而不是這個......
function() {
// Logic
}();
當一個函數被包裹在括號它解析爲一個表達式 - 函數表達式。否則沒有它們,它被解析爲函數聲明。函數聲明需要一個名稱,它看起來沒有給出它,這又會導致語法錯誤。此外,您不能將()
內聯應用於函數聲明以調用它。空括號是一個語法錯誤,但是非空括號是一個將與函數分開計算的表達式。
'function foo(){}(bar);'雖然是有效的,但它不會做你想要的。 – 2013-02-18 00:43:11
非常好的答案,謝謝。 – contactmatt 2013-02-18 17:39:01
@FelixKling,你的例子會做什麼? – contactmatt 2013-02-18 17:41:26
第二個是允許表達式允許的地方,例如, 'var x = function(){return'foo'}();' – RobG 2013-02-18 03:36:28