Leksyczne otoczenie funkcji w JavaScript
Wszystkie zewnętrzne, dostępne dla funkcji zmienne, nazywane są jej leksycznym otoczeniem (LexicalEnvironment).
W następnym przykładzie funkcji dostępne są dwie
zmienne: num1 i num2, które
stanowią leksyczne otoczenie naszej funkcji:
let num1 = 1;
let num2 = 2;
function func() {
// funkcja zna zmienne num1 i num2
}
Samo leksyczne otoczenie reprezentuje swego rodzaju wewnętrzny obiekt JavaScript, powiązany z naszą funkcją. W tym przypadku można go przedstawić w następującej formie:
{num1: 1, num2: 2}
Wartość dowolnej zmiennej leksycznego otoczenia zawsze równa się bieżącej wartości tej zmiennej:
let num1 = 1; // otoczenie {num1: 1}
let num2 = 2; // otoczenie {num1: 1, num2: 2}
// Zmieńmy zmienną num1:
num1 = 123; // otoczenie {num1: 123, num2: 2}
function func() {
}
Kiedy próbujemy odwołać się do jakiejkolwiek zmiennej wewnątrz funkcji, zmienna ta najpierw jest wyszukiwana wśród lokalnych zmiennych funkcji i, jeśli takiej zmiennej tam nie ma, jest wyszukiwana w leksycznym otoczeniu funkcji.