У меня есть этот код с объявлением функции и оператором дополнительного блока, который создает новую лексическую среду:
console.log("1:"+foo);
{
console.log("2:"+foo);
function foo(){ console.log("checked"); }
console.log("3:"+foo);
}
console.log("4:"+foo);
Почему сначала выводится лог undefined
?
Да, функция поднята. Но неясно, почему внутри оператора блока мы получаем эту функцию до объявления и после объявления, но за пределами блока до объявления мы получаем неопределенное значение.
Я хотел бы получить объяснение с точки зрения спецификации .