我见过(我知道还有更多)使用 IIFE 的两种方法:
(function(){
console.log(this);
}).call(this);
(function(){
console.log(this);
})();
有什么理由.call(this)在第一个上使用吗?不会();在函数内产生相同的上下文吗?
我见过(我知道还有更多)使用 IIFE 的两种方法:
(function(){
console.log(this);
}).call(this);
(function(){
console.log(this);
})();
有什么理由.call(this)在第一个上使用吗?不会();在函数内产生相同的上下文吗?
这取决于代码的执行位置。
.call(this)将 显式设置为this您传递给的对象.call。仅使用();将设置this为window(或undefined在严格模式下)。
如果代码在全局范围内执行,它将是相同的。如果不是,那么如果this不引用window(或是undefined),您将得到不同的结果。
例子:
var obj = {
foo: function() {
(function(){
console.log(this); // this === obj
}).call(this); // this === obj
(function(){
console.log(this); // this === window
})();
}
};
obj.foo();