@dmitriyivvvv

Область видимости и iife?

Добрый вечер. Объясните пожалуйста почему в этом примере
при вызове iife выбрасывается исключение "TypeError: Cannot read property 'test' of undefined
var obj = {
  test() {
    console.log(this);
  }
}

(obj.test)()

А если использовать let вместо var вообще ReferenceError: obj is not defined.
Что здесь происходит?
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Смотрите
var obj = {
  test() {
    console.log(this);
  }
}(obj.test)()

На что это похоже?
А вот так?
var obj = {
  test() {
    console.log(this);
  }
}();

На попытку вызвать функцию с выражения, и передать в нее obj.test, хотя obj еще не существует.
Вот так еще нагляднее
var obj = ({
  test() {
    console.log(this);
  }
}(obj.test)());

т.е. присваивание всего этого в obj идет в последнюю очередь, а до этого, мы пытаемся использовать obj, но он еще не существует. Хотя даже если вы вместо obj.test поставите другую переменную, или например число, то будет ошибка
Uncaught TypeError: {(intermediate value)} is not a function
т.е. вы пытаетесь выполнить конструкцию вида
({a: 10}())
И все из-за того, что вы забыли точку с запятой
var obj = {
  test() {
    console.log(this);
  }
};

(obj.test)()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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