JavaScript 中的 IIFE 调用

IT技术 javascript
2021-03-09 10:08:56

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

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

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

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

1个回答

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

.call(this)将 显式设置为this您传递给的对象.call仅使用();将设置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();

有关thisMDN 的更多信息

IIFE 是一个正常的函数。您可以this使用.call显式设置.apply
2021-05-14 10:08:56
我所知道的 Felix IIFE 在非严格模式下总是指窗口对象,在严格模式下是未定义的,所以......
2021-05-16 10:08:56