Задать вопрос

Как происходит всплытие переменной?

У меня есть такая функция. В итоге в консоль выводит 10.

var foo = 1; 
function bar() { 
    if (!foo) { 
        var foo = 10; 
    } 
    console.log(foo); 
} 
bar(); //--> 10


Вопрос: каким образом в консоль выводится 10? Получается, что натыкаясь на foo в самом условии if, переменная foo объявляется в пределах функции, потом браузер ищет переменную foo в пределах функции, находит undefined, которое благодаря логическому оператору "не" переводится в true. Выводится 10. Или как?

Просто где-то еще читаю, что всплытие всегда объявляет глобальную переменную (то есть не в самой функции), ну если объявляется глобальная переменная, я не понимаю как тогда происходит вывод 10.
  • Вопрос задан
  • 383 просмотра
Подписаться 1 Простой Комментировать
Решение пользователя Сергей Соколов К ответам на вопрос (3)
sergiks
@sergiks Куратор тега JavaScript
♬♬
Внутри функции наверх выплывает только объявление локальной переменной var foo;

var foo = 1; // можно стереть
function bar() { 
    var foo; // всплыло сюда. Этот foo – иной, чем верхний foo!
    if (!foo) { // тут foo undefined,  !foo === true
        foo = 10; // выполняется, назначается 10
    } 
    console.log(foo); // вывели 10
} 
bar(); //--> 10
Ответ написан