1

我见过的两种使用 IIFE 的方法(我知道还有更多):

(function(){
    console.log(this);
}).call(this);

(function(){
    console.log(this);
})();

有什么理由.call(this)在第一个上使用吗?不会();在函数中产生相同的上下文?

4

1 回答 1

4

这取决于代码的执行位置。

.call(this)将 显式设置为this您传递给的对象.call。只有 using();才会设置thiswindow(或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();

this有关MDN 的更多信息

于 2013-06-05T10:08:01.640 回答