Почему данный код выдает ошибку?

Есть код:
var user = {
    name: 'John Smith',
    getName: function() {
        var self = this;
        console.log(this.name);
        console.log(self.name);
        (function(){
            console.log(this.name);
            console.log(self.name);
        }());
    }
};
user.getName();

Данная строка console.log(this.name) выдает ошибку
Uncaught TypeError: Cannot read properties of undefined (reading 'name')
не могу понять почему. Объясните пожалуйста
  • Вопрос задан
  • 97 просмотров
Решения вопроса 2
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Потому что внутри IIFE this - window.

https://habr.com/ru/post/149516/

Уточнение: в strict режиме (введен в es5) this по умолчанию - undefined
а с es6 strict режим включается автоматически если использовать в коде любую синтаксическую конструкцию из es6+
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Внутри скобок создаётся и тут же вызывается функция. (IIFE – immediately invoked functional expression)

this для функции, объявленной как function определяется в момент её вызова. Если её вызывают будто она свойство объекта, этот объект будет this'ом.

Внутри скобок function сама по себе, ни к кому не приделана, разве только к Глобальному. В данном случае window. Поэтому там this === window.

Ну а window это не user. И там нет искомого свойства, скорее всего. Или есть, но неожиданно другое.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы