Что такое лексическое окружение?
Основы языка
Лексическое окружение (Lexical Environment) — это внутренняя структура движка, которая хранит переменные и функции текущей области видимости и ссылку на внешнее окружение.
Из чего состоит
- Environment Record — хранилище локальных переменных, параметров и функций.
- Ссылка на внешнее лексическое окружение — на окружение, где данный код был объявлен.
function outer() {
let a = 1; // в окружении outer
function inner() {
let b = 2; // в окружении inner
return a + b; // a найдётся во внешнем окружении
}
return inner;
}Как работает поиск переменных
Если переменная не найдена в текущем Environment Record, движок идёт по ссылке во внешнее окружение — и так до глобального. Это цепочка областей видимости.
Связь с замыканиями
Замыкание — это как раз функция вместе со ссылкой на своё лексическое окружение. Пока функция жива, её внешнее окружение не удаляется сборщиком мусора, поэтому переменные сохраняются.
Лексическое = статическое
«Лексическое» значит, что окружение определяется местом объявления в коде, а не местом вызова.
Коротко для собеседования
Лексическое окружение — структура с локальными переменными и ссылкой на внешнее окружение (по месту объявления). Поиск переменных идёт по цепочке наружу до глобального. На нём основаны области видимости и замыкания.