2013-10-17 36 views
1

在查看uuid.js的代碼時,我注意到了這個模式用於定義整個api。(function(){/*...*/}).call(this);的優點

(function() {/*...*/}).call(this); 

這種模式在JavaScript中有什麼優勢?

+0

自我執行的JavaScript函數。對於[.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call) – Praveen

+0

@RoyiNamir否,正常的IIFE將使用全局上下文。 – Alnitak

+1

@RoyiNamir除非你不能,因爲'this'將是全局對象。 '.call(this)'覆蓋了這個。 –

回答

4

這只是一個立即調用函數表達式具有定義的上下文(this)。正常的IIFE將以全局對象爲上下文。

閱讀您鏈接到源文件,在這種情況下(沒有雙關語意)他們正在使用this獲得明確參考全局對象,沒有假設它的命名或者window(用於瀏覽器)或global(用於node.js等)。 (IIFE是一種常見的構造,用於創建一個新的作用域,其中可以聲明變量而不污染全局名稱空間,並使塊內的代碼立即執行)。

1

這樣做的主要優點是您可以根據需要在函數中聲明儘可能多的變量,並且不會污染全局範圍。

另請參閱:module pattern.

+1

我相信OP沒有詢問IIFE,而是「FE.call(this)'的具體使用,而不是僅僅是'FE()'。 – Alnitak

+0

它允許您告訴函數在函數內部將被綁定爲「this」。 –