Какова область действия функции внутри блока в JavaScript?

Что я знаю, так это то, что объявления функций поднимаются в верхнюю часть включающей функции. Итак, рассмотрим код ниже:

{
    function foo(num) {
        console.log("foo: " + num)
        count++
    }

    function getCount() {
        return count
    }
    let count = 0   
}

foo(1)
foo(2)
foo(3)
console.log(getCount())

Насколько я понимаю, после подъема приведенный выше код должен стать:

function foo(num) {
    console.log("foo: " + num)
    count++
}

function getCount() {
    return count
}

{
    let count = 0   
}

foo(1)
foo(2)
foo(3)
console.log(getCount())

Если это правда, то при выполнении getCount() я должен столкнуться с ошибкой, что getCount() не может получить доступ к переменной count. Однако я получаю результат как 3, что означает, что функция getCount() действительно имеет доступ к переменной count, которая является локальной по отношению к блоку, который ее включает. Как такое возможно? Это закрытие? Объясните пожалуйста.

0 ответов

Другие вопросы по тегам