Лексическое окружение (Lexical Environment) — это специальная структура, которая создается при каждом вызове функции или выполнении блока кода. Она хранит все переменные и функции, доступные в текущем контексте выполнения.
Каждая функция "помнит" своё лексическое окружение, то есть то место в коде, где она была создана. Именно благодаря этому функции могут получать доступ к переменным не только из своего блока, но и из родительских блоков, где они были объявлены.
💡 Пример:
👀 Что происходит?
При вызове outer() создается своё лексическое окружение, которое хранит outerVar.
Функция inner() также создает своё окружение с переменной innerVar.
Однако inner() может "видеть" и использовать переменные из внешнего окружения (в данном случае outerVar), а вот наоборот не работает — внешняя функция не имеет доступа к переменным внутренней.
⚡️ Это и есть суть лексического окружения: доступ к переменным определяется тем местом, где функция была объявлена, а не вызвана!