IIFE 的 this 是否总是指向全局对象?

Does an IIFE's this always point towards the global object?

我在下面有一个代码片段。

var obj = {
 name: "Mohit",
 func: function(){
  var self = this;
  (function(){
    console.log(this.name);
    console.log(self.name)
  })()
 }
}

执行 obj.func() 后,第一个 console.log 未定义,而第二个为 Mohit。

这是否意味着 IIFE 总是将 this 绑定到全局 window 对象?

如何将 self 定义为 this 是发生在 obj 上的 IIFE 的绑定?

您调用的任何 函数都没有明确引用 thisthis 设置为全局对象,或者在“严格”模式下设置为 undefined(在你的例子中不是这种情况)。

如果需要,您可以明确确保 this 绑定到 obj

    var obj = {
     name: "Mohit",
     func: function(){
      var self = this;
      (function(){
        console.log(this.name);
        console.log(self.name)
      }).call(this)
     }
    }
    obj.func();

通过使用 .call(this),您可以在被调用函数中为 this 提供一个值。