2013-10-17 83 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”。 –