Я пытаюсь понять подъем переменных в Javascript, в частности, порядок, в котором поднимаются объявления функций и объявления переменных.Насколько я понимаю, объявления функций сначала поднимаются, а затем - объявления переменных.
Следующие два фрагмента кода позволяют мне думать, что в некоторых случаях объявления переменных должны предшествовать объявлениям функций:
bar();
function bar() {
console.log(foo);
}
var foo;
// The console will log: undefined
bar();
function bar() {
console.log(undeclaredVariable);
}
/* As expected, the above throws:
* "ReferenceError: undeclaredVariable is not defined"
*/
В обоих случаях функция bar
поднимается, поэтому я могу сразу вызвать ее в первой строке.Но если такие переменные, как foo
, выводятся после функций, не должно ли console.log(foo)
также выдавать ReferenceError
в первом фрагменте, как console.log(undeclaredVariable)
во втором фрагменте, так как он еще не был объявлен?Каков фактический порядок, когда дело доходит до того, как Javascript обрабатывает объявления переменных и подъем?