Подъем в JavaScript вместе с глобальной переменной - PullRequest
1 голос
/ 24 октября 2019

Приведенный ниже код дает вывод undefined. У меня сложилось впечатление, что все объявления переменных и функций поднимаются до вершины их области видимости, поэтому теперь b должно быть в верхней части области видимости перед вызовом a(). Тем не менее, я все еще получаю undefined как мой вывод?

a()

var b = 5;
function a() {
  console.log(b)
}

Ответы [ 4 ]

5 голосов
/ 24 октября 2019

Вы неправильно понимаете, как работает подъем. Он не поднимает назначение , он только поднимает объявление . Ваш код эквивалентен следующему:

var b; // undefined
function a(){
 console.log(b)
}
a();
b = 5;
4 голосов
/ 24 октября 2019

Да, объявление переменной поднято, но значение не установлено на b. Код выглядит так

var b
function a(){
 console.log(b)
}
a()
b = 5;
2 голосов
/ 24 октября 2019

Подъем означает, что переменные будут созданы «наверху» - но это ничего не изменит в то время, когда происходит присвоение значения , часть b = 5 все еще происходит, когдаисполнение достигает той части, где оно написано. Поэтому, если вы позвоните a() до этого, b существует , но еще не получил никакого назначенного значения ... следовательно, undefined

0 голосов
/ 24 октября 2019

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

...