首页 > 解决方案 > IIFE 的 this 是否总是指向全局对象?

问题描述

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

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 绑定到全局窗口对象?

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

标签: javascriptfunctionecmascript-6ecmascript-5iife

解决方案


您在没有明确引用的情况下调用的任何this函数都将this设置为全局对象,或者在“严格”模式下设置为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


推荐阅读