объем этого в самовыполняющейся функции

Кто-нибудь может сказать, почему глобальная область не применима в следующем случае? Почему строка № 6 печатает undefined? Разве внешнее «это» не должно быть доступно во внутренней самовыполняющейся функции?

var myObj = {
  test1 : 4,
  func : function(){
    console.log(this.test1); //prints 4
    (function(){
      console.log("From self-executing function : " + this.test1); //prints undefined
    })();
  }
};

myObj.func();

Где, как в следующем случае, глобальная область работает нормально. test1, объявленный во внешней области видимости, прекрасно доступен во внутренней функции.

var test1 = 10;
    (function(){
      console.log("From self-executing function : " + test1); //prints 10
    })();

Может ли кто-нибудь объяснить, что мне здесь не хватает, чтобы понять?


person sandy    schedule 20.01.2019    source источник
comment
Что-то связанное с функцией в функции, вам нужно будет передать это второму. Не знаю почему конкретно..   -  person Matthew Page    schedule 20.01.2019
comment
Попробуйте console.log(this) посмотреть значение this что такое   -  person FZs    schedule 20.01.2019
comment
@FZs ... хорошо попробовал это, и он говорит [object Window] для этой внутренней функции, но не мог понять, почему так? почему внешняя область в этом случае не активна?   -  person sandy    schedule 20.01.2019
comment
Вы можете связать вторую функцию или использовать функцию стрелки   -  person Szymon D    schedule 20.01.2019
comment
глобальная область != внешняя область.   -  person Bergi    schedule 20.01.2019
comment
Вы звоните func myObj, поэтому this является myObj в func. Вы вызываете внутреннюю функцию ни для чего, и она не привязана, поэтому во внутренней функции this является глобальным объектом window в нестрогом режиме или undefined в строгом режиме.   -  person Paul-Louis Ageneau    schedule 20.01.2019


Ответы (1)


Во внутренней функции this относится к глобальному объекту (если не в строгом режиме).

Вы можете изменить код следующим образом, чтобы получить ожидаемый результат:

var myObj = {
  test1 : 4,
  func : function(){
    console.log(this.test1);
    var self = this;
    (function(){
      console.log("From self-executing function : " + self.test1);
    })();
  }
};

myObj.func();
person Paul-Louis Ageneau    schedule 20.01.2019