Почему не происходит всплытие переменной?
//var a;
a;
a = 10;
console.log(a);
Я использую "а", по идее должно произойти всплытие - переменная должна сама объявиться, дальше переменной "а" присваивается значение 10. Почему не выводится 10?
Здесь же все работает нормально, хотя переменная не была объявлена заранее:
//var foo;
function bar() {
foo = 10;
}
bar();
console.log(foo);
Почему так? Как работает этот код?
Ответы (2 шт):
Насколько я понимаю, в нестрогом режиме есть правило о необъявленных переменных (которые становятся глобальными):
Необъявленные переменные не существуют до тех пор, пока к ним не выполнено присваивание.
Отсюда: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/var
Разница в вашем коде не зависит от функции. Попробуйте сравнить два кода:
a;
a = 10;
Код без присваивания вызывает ошибку, а с присваиванием — не вызывает (не в strict mode).
Внутри функций то же самое:
(function bar() { a ; })();
вызывает ошибку, а
(function bar() { a = 10 ; })();
не вызывает (не в strict mode).
Потому что всплывает объявление, а объявления ут ебя нет. Вот так нормально:
a;
var a = 10;
console.log(a);