我见过两种使用IIFE的方法(我知道还有更多):
(function(){
console.log(this);
}).call(this);
(function(){
console.log(this);
})();
有没有理由在第一个上使用.call(this)
? ();
不会在函数中产生相同的上下文吗?
答案 0 :(得分:4)
这取决于代码的执行位置。
.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();