【发布时间】:2013-05-31 23:33:40
【问题描述】:
我见过的两种使用 IIFE 的方法(我知道还有更多):
(function(){
console.log(this);
}).call(this);
(function(){
console.log(this);
})();
有什么理由在第一个上使用.call(this) 吗? (); 不会在函数中产生相同的上下文吗?
【问题讨论】:
标签: javascript
我见过的两种使用 IIFE 的方法(我知道还有更多):
(function(){
console.log(this);
}).call(this);
(function(){
console.log(this);
})();
有什么理由在第一个上使用.call(this) 吗? (); 不会在函数中产生相同的上下文吗?
【问题讨论】:
标签: javascript
这取决于代码的执行位置。
.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();
【讨论】:
.call 或.apply 显式设置this。