"Куда" происходит всплытие переменной?
Раньше думала, что всплытие происходит на самый верх области видимости переменной. То есть как тут. Так как переменная видна только в функции, то соответственно, объявление будет происходит в самом начале функции.
var foo = 1;
function bar() {
//var foo;
if (!foo) {
var foo = 10;
}
console.log(foo);
}
bar();
Но уже здесь уже почему-то происходит объявление глобальной переменной, а не локальной.
//var a;
function c() {
a = 7;
}
c();
console.log(a);
Почему так работает?
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
При присваивании выполняется абстрактная операция PutValue
Как указано в спецификации в 5 пункте:
5. Если переменная не определена, то
а. Если строгий режим
i. Кинуть ошибку ReferenceError.
b. Получить ссылку на глобальный объект.
c. Установить в глобальном объекте свойство с именем соответствующим имени переменной и значением - соответствующим значению переменной.
Формально для браузера, код
function c() {
a = 7;
}
Эквивалентен
function c() {
window.a = 7;
}
В случае, если a нигде не объявлена.