1.在我的代码中
(function(){})();
2.often read
(function(){}.call(this));
运作良好。哪一个更好?为什么呢?
答案 0 :(得分:1)
通常情况下,IIFE始终与全球背景相关联。在你的第二个片段中,它绑定到第一个调用参数提供的上下文。比如没有电话
var a = 20,
obj = {a:10};
(function(){console.log(this.a)})()

但您可以通过调用
更改上下文
var a = 20,
obj = {a:10};
(function(){console.log(this.a)}.call(obj))

您可能认为.call(this)
总是引用全局对象,但可能并非如此,具体取决于调用IIFE的时间。让我们扩展一个例子,只有在调用o.b()
时才会调用IIFE。
Wiithout .call(this)
var a = 20,
obj = {a:10,
b: function(){
return (function(){console.log(this.a)})()
}
};
obj.b();

和.call(this)
var a = 20,
obj = {a:10,
b: function(){
return (function(){console.log(this.a)}.call(this))
}
};
obj.b();