У меня есть справедливое представление о области видимости JavaScript - что язык имеет область функционального уровня, а объявления переменных и функций поднимаются в верхней части их сдерживающей области. Тем не менее, я не могу понять, почему следующие две части кода регистрируют разные значения:
Это регистрирует значение 1 на консоли:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
console.log(a);
И таинственно, этот журнал 10:
var a = 1;
function b() {
a = 10;
return;
}
b();
console.log(a);
Итак, что происходит под капотом?