javascript подъем для глобальной переменной

Мне было интересно, как работает подъем javascript для глобальной переменной.

Допустим, у меня есть следующий фрагмент кода:

var a = 5;
function print(){
    console.warn("a",a,b);
    var a = 10;
    b=5;
    console.warn("a",a);
}
print();

В этом случае я получаю сообщение об ошибке "b не определено". Интересно, почему подъем Javascript не работает для глобальной переменной. Я пытался найти это, но получил результаты только для подъема переменной. Какие-нибудь мысли??


person Mayank    schedule 05.11.2014    source источник
comment
По сути: b=5; не поднимается. Только операторы var делают.   -  person Cerbrus    schedule 05.11.2014
comment
Итак, когда я говорю b = 5, это имеет глобальную область действия, так почему бы не взять глобальную область действия.   -  person Mayank    schedule 05.11.2014
comment
Большое спасибо, я узнал новую вещь о JavaScript :-) Я также посмотрел это: w3schools .com/js/js_hoisting.asp   -  person jyrkim    schedule 05.11.2014


Ответы (1)


Операторы var подняты. функция объявления поднимается. Присваивания не поднимаются (до такой степени, что если вы комбинируете оператор var с присваиванием (var foo = 1), то часть объявления поднимается, а присваивание — нет).

person Quentin    schedule 05.11.2014
comment
Итак, когда я говорю b = 5, это имеет глобальную область действия, так почему бы не взять глобальную область действия. - person Mayank; 05.11.2014
comment
@Mayank: вся переменная b не поднимается. Это означает, что во время console.warn("a",a,b); b еще не существует. - person Cerbrus; 05.11.2014