我见过的两种使用 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
。只有 using();
才会设置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();