Есть следующий код:
const q = 1;
function outer() {
console.log('outer run')
const w = 2;
return function inner() {
console.log('inner run')
const e = 3;
console.log(q);
}
}
outer()()
Здесь 3 лексических окружения:
inner() -> outer() -> global
Порядок их создания такой:
1. При вызове inner() для неё создаётся лексическое окружение(ЛО), которое ссылается на более внешнее ЛО(то есть на ЛО outer)
2. При вызове outer() для неё создаётся ЛО, которое ссылается на глобальное ЛО
Проблема в том, что inner() и outer() это функции, а глобальное ЛО это не функция. Почему же глобальное ЛО тоже рассматривается движком js как функция? Это исключение или как это понимать?