IIFE和电话之间的区别

Jon*_* M. 8 javascript scope namespaces

是否有区别:

(function(){

}).call(this);
Run Code Online (Sandbox Code Playgroud)

(function(){

})();
Run Code Online (Sandbox Code Playgroud)

要么

var MODULE = {};
(function(){
    this.hello = 'world'
}).call(MODULE);
Run Code Online (Sandbox Code Playgroud)

var MODULE = {};
(function(m){
    m.hello = 'world'
})(MODULE);
Run Code Online (Sandbox Code Playgroud)

我经常在编译的javascript中看到第一个案例.他们都会创建一个范围并做好他们的命名工作.

有什么区别或只是品味问题.

编辑:为什么编译的JavaScript将使用IIFE调用?

Aru*_*hny 7

(function(){

}).call(this);
Run Code Online (Sandbox Code Playgroud)

调用匿名函数,其中函数this内部将指向this调用时引用的对象.

(function(){

})();
Run Code Online (Sandbox Code Playgroud)

调用匿名函数,其中函数this内部将指向全局对象(或在严格模式下未定义)

演示:小提琴

  • 请注意,在严格模式下,第二个示例中的*this*将是未定义的. (5认同)