Лексическо окружение на функции в JavaScript

Всички външни, достъпни за функцията променливи, се наричат нейното лексическо окружение (LexicalEnvironment).

В следващия пример на функцията са достъпни две променливи: num1 и num2, които и представляват лексическото окружение на нашата функция:

javascriptlet num1 = 1;
let num2 = 2;

function func() {
  // функцията знае за променливите num1 и num2
}

Самото лексическо окружение представлява някакъв вътрешен обект на JavaScript, свързан към нашата функция. В този случай то може да бъде представено в следния вид:

javascript{num1: 1, num2: 2}

Стойността на която и да е променлива от лексическото окружение винаги е равна на текущата стойност на тази променлива:

javascriptlet num1 = 1; // окружение {num1: 1}
let num2 = 2; // окружение {num1: 1, num2: 2}

// Да променим променливата num1:
num1 = 123; // окружение {num1: 123, num2: 2}

function func() {
  
}

Когато се опитаме да достъпим която и да е променлива вътре във функцията, тази променлива първо се търси сред локалните променливи на функцията и, ако такава променлива не бъде намерена там, се търси в лексическото окружение на функцията.