Всегда ли IIFE указывает на глобальный объект? - PullRequest
0 голосов
/ 20 июня 2020

У меня есть фрагмент кода ниже.

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

После выполнения obj.fun c () я получаю, что первый console.log не определен, а второй - Mohit .

Означает ли это, что IIFE всегда привязывает this к глобальному объекту окна?

Как определение себя как this является привязкой IIFE к объекту?

1 Ответ

1 голос
/ 20 июня 2020

Любая функция , которую вы вызываете без четкой ссылки на 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 внутри вызываемой функции.

...