Открыть меню    

Область видимости и поднятие в javascript

Блоки кода, например те, которые мы определяем за if, не создают новую область видимости. Только функции создают новые области видимости.

javascript

var war = 1;
function showWar() {
    if (!war) {
        var war = 10;
    }
    console.log(war);
}

showWar();  // 10

Что десь происходит: переменная war поднялась, но значение переменной не поднялось. Поэтому выполнится условие и в консоли будет выведено 10.

Интерпретатор JavaScript всегда «поднимает» объявления функций и переменных в начало области видимости. Параметры функций и встроенные переменные языка, очевидно, изначально уже находятся в начале.

Обратите внимание, что присваивание значений переменным не поднимается вместе с их объявлением. Поднимаются только объявления переменных. В случае с функциями, поднимается вся функция целиком, если речь идет о функциях-объявлениях (declaration); функция-выражение (expression) не поднимается.

Например, следующий код:

javascript

function foo() {
    bar();
    var x = 1;
}

интерпретируется так:

javascript

function foo() {
    var x;
    bar();
    x = 1;
}

Хорошая статья про поднятие в javascript: javascript область видимости и подъем

Русский перевод: на habrahabr.ru

Комментарии к статье

Добавить комментарий к сниппету