По сути, объявления функций выполняются до выполнения кода. Позвольте мне попытаться прояснить ситуацию.
Давайте сначала переименуем функции для этого, чтобы я мог лучше объяснить, как это работает:
{
function bar() {
console.log("1");
}
}
function foo() {
console.log("2");
}
Что делает ваш компилятор, он просматривает ваш js-файл и видит, что есть одно объявление функции, которое является функцией foo (игнорируя то, что находится внутри скобок). Затем он запускает файл js, как обычно, заходит в скобки и видит, что есть еще одно объявление функции (функция bar ()), которое объявлено после функции foo ().
Итак, по сути, эторезультат, который вы получите:
bar() // returns "1"
{
function bar() {
console.log("2")
}
}
bar() // returns "2"
function bar() {
console.log("1")
}
bar() // returns "2"
Надеюсь, это имеет смысл.
Для получения дополнительной информации, попробуйте поискать выражение функции против объявления функции , а также узнать, какработает компилятор javascript, это поможет вам лучше понять, как работает подъем.