2013-03-15 59 views
2

有VS執行IIFE的不同方法?

(function(){alert('')}) () 

這兩部作品,但是當我應該使用每個

(function(){alert('')} ()) 

之間有什麼區別?

+1

不,這只是一種風格選擇。使用任何你喜歡的。但請注意[JSLint會希望你使用第一種形式](http://jslinterrors.com/move-the-invocation-into-the-parens-that-c​​ontain-the-function/)。 – 2013-03-15 09:40:35

回答

3

包裝括號僅用於強制解析器將結構解析爲函數表達式,而不是函數聲明。這是必要的,因爲調用函數聲明是非法的,但調用函數表達式是合法的。

爲此,調用圓括號的位置並不重要。你如何強制函數被解析爲表達式也無關緊要。下面將工作一樣好:

​​

如果你決定使用包裝括號(分組運算符),然後只需記住,JSLint will tell you to move the invoking parentheses inside。這只是一種風格選擇,如果您願意,您可以忽略它。

+0

我聽說也有加號的作品.... :-) – 2013-03-15 09:43:53

+0

@RoyiNamir,甚至['void'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/void )操作員工作:-) – 2013-03-15 09:46:36

+0

@ Barmaley.exe我有嘗試它:-) – 2013-03-15 09:47:04

1

他們都做同樣的事情。

JSLint建議您使用第一個,在分組圓括號內執行圓括號,大概是這樣一切都整齊地組合在一起。

對於什麼是值得的,我個人認爲你的第二個例子更清晰,因爲當掃描代碼時,你可以看到執行是從函數表達式中突出的。

雖然不是重複的,但是this question涵蓋了類似的地面,因此可能值得一看。