Лексическое окружение функций в JavaScript
Все внешние, доступные функции переменные, называются ее лексическим окружением (англ. LexicalEnvironment).
В следующем примере функции доступны две
переменные: num1
и num2
, которые
и являются лексическим окружением нашей функции:
let num1 = 1;
let num2 = 2;
function func() {
// функция знает про переменные num1 и num2
}
Само лексическое окружение представляет собой некий внутренний объект JavaScript, привязанный к нашей функции. В данном случае его можно представить в следующем виде:
{num1: 1, num2: 2}
Значение любой переменной лексического окружения всегда равно текущему значению этой переменной:
let num1 = 1; // окружение {num1: 1}
let num2 = 2; // окружение {num1: 1, num2: 2}
// Поменяем переменную num1:
num1 = 123; // окружение {num1: 123, num2: 2}
function func() {
}
Когда мы пытаемся обратится к какой-либо переменной внутри функции, эта переменная вначале ищется среди локальных переменных функции и, если такой переменной там нет, то ищется в лексическом окружении функции.