2016-07-05 67 views
7

我見過IIFE的書面:立即調用函數表達式:何處放置圓括號?

​​

還有:

(function() { 
    console.log("do more cool stuff"); 
}()); 

他們似乎工作,我用他們的任何方面是相同的,但在情況下,我已經告訴一種是正確的,另一種是錯誤的,反之亦然。有沒有人有任何堅實的理由或邏輯,因爲它被寫在另一個訂單上?是否存在一些情況,在函數體關閉後但在調用括號開始之前或之後但在最後右括號之前可能會有更多情況發生?我主要在Angular模塊關閉中使用這些方法,似乎無法找到任何真正的理由去做某種方式,想知道是否有人有不同的經驗。

+0

沒關係。 「我被告知有一種方式是正確的,另一種是錯誤的,反之亦然」 - 這只是一個品味問題。 – zerkms

回答

8

簡答:只要你把它們放在那裏,沒關係。

長答案:沒關係,因爲對於JavaScript來說唯一重要的是他們在那裏。原因是語言規範規定,如果您聲明名爲函數的,則聲明只能以function關鍵字開頭。因此,它是對規範來定義這樣一個IIFE:

function() {}(); 

的解決方法,這是包住整個事情括號,因此該聲明不與function關鍵字開始了。通過使用

(function() {})(); 

以及通過實現這一點:

(function() {}()); 

你選擇哪一個完全是任意的,因此給你。

我(個人)把括號周圍的函數,而不是周圍的號召,即像這樣的:

(function() {})(); 

原因:我想使用的代碼,最小的一部分被包裹在東西是隻是出於技術原因需要,這是函數定義,而不是調用。除此之外,規範說明你不能通過定義函數,它不是關於調用函數。因此,我認爲,如果您包裝定義而不是呼叫,則更爲明確。

+0

...和一個長的答案? – zerkms

+0

我的想法正好,哈哈,會愛上一個長長的答案。 –

+0

補充說,我點擊*保存*太早。對不起: - ( –