PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Что такое лексическое окружение?

Основы языка

Лексическое окружение (Lexical Environment) — это внутренняя структура движка, которая хранит переменные и функции текущей области видимости и ссылку на внешнее окружение.

Из чего состоит

  1. Environment Record — хранилище локальных переменных, параметров и функций.
  2. Ссылка на внешнее лексическое окружение — на окружение, где данный код был объявлен.
function outer() {
  let a = 1;            // в окружении outer
  function inner() {
    let b = 2;          // в окружении inner
    return a + b;       // a найдётся во внешнем окружении
  }
  return inner;
}

Как работает поиск переменных

Если переменная не найдена в текущем Environment Record, движок идёт по ссылке во внешнее окружение — и так до глобального. Это цепочка областей видимости.

Связь с замыканиями

Замыкание — это как раз функция вместе со ссылкой на своё лексическое окружение. Пока функция жива, её внешнее окружение не удаляется сборщиком мусора, поэтому переменные сохраняются.

Лексическое = статическое

«Лексическое» значит, что окружение определяется местом объявления в коде, а не местом вызова.

Коротко для собеседования

Лексическое окружение — структура с локальными переменными и ссылкой на внешнее окружение (по месту объявления). Поиск переменных идёт по цепочке наружу до глобального. На нём основаны области видимости и замыкания.

Другие вопросы раздела