Почему 10 напечатано в этом вопросе о поднятии фрагмента javascript - PullRequest
0 голосов
/ 19 июня 2020

Доброго времени суток всем. Осваиваю поведение javascript со времен пандемии c. Я уже знаю о подъеме, но на днях я увидел, что парень отправил этот фрагмент кода группе

var foo = 1

function bar(){

    if(!foo){
       var foo = 10
    }

    console.log(foo)
}

bar()

Этот фрагмент кода печатает 10!

Я знаю, что объявление var - это только поднял не инициализацию и что присвоение 10 никогда не произойдет, потому что! foo здесь ложно

Так почему, черт возьми, это печатает 10? Просвети меня, пожалуйста ?

Ответы [ 2 ]

0 голосов
/ 14 августа 2020

Я читал несколько раз, что это реальный вопрос интервью на листе бумаги. Если это так, просто скажите парню, что он может также напечатать 1.

var fоo = 1

function bar(){
    if(!foo){
       var foo = 10
    }
    console.log(fоo)
}

bar()

Несерьезный ответ.

0 голосов
/ 19 июня 2020

Поскольку var поднимается, переменная с именем foo объявляется внутри функции и маскирует глобальную переменную с тем же именем.

На данный момент ему не присвоено значение, поэтому оно равно undefined.

Когда мы достигаем второй строки функции, запускается инструкция if, потому что !undefined - это true, поэтому строка 3 присваивает ему 10.

Строка 6 затем записывает его.

...