@Rapen

Почему в самовызывающейся фукнции переменная undefined?

Почему в момент вызова функции name у нас undefined? Все дело в хоистинге, но конкретно не пойму, хелп:)
var p = 'val';
(function () {
    if (typeof p === 'undefined' /*Почему он undefined?*/) {
		console.log(p);
        var p = "newVal";
        console.log(p);
    } else {
        console.log(p);
    }
})();// newVal
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
@bogomazov_vadim
Дело в hoisting. Присваивание значений не поднимается вместе с объявлением переменных.
Ваш код аналогичен следующему:
var p = 'val';
(function () {
    var name; // undefined
    if (typeof name === 'undefined') {
    console.log(name);
        name = "newVal";
        console.log(name);
    } else {
        console.log(name);
    }
})();// newVal


Про hoisting и область видимости
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Потому что переменная name не создана. Если будет 'use strict' - будет ошибка
Ответ написан
AppFA
@AppFA
Frontend developer at Yandex
Пользуйтесь дебагом, и да это hoisting, когда вы вновь пишите var p = 'newVal', то вы создаете в текущем скоупе эту переменную, но на момент обращения к ней она ещё не определена, поэтому undefined.
c5d87d6cf6584f0bb41921c30557aa50.png
Ответ написан
Ваш ответ на вопрос

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

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