Funktioiden leksikaalinen ympäristö JavaScriptissä

Kaikkia funktion ulkopuolisia, käytettävissä olevia muuttujia kutsutaan sen leksikaaliseksi ympäristöksi (LexicalEnvironment).

Seuraavassa esimerkissä funktiolle ovat käytettävissä kaksi muuttujaa: num1 ja num2, jotka muodostavat funktiomme leksikaalisen ympäristön:

javascriptlet num1 = 1;
let num2 = 2;

function func() {
  // funktio tuntee muuttujat num1 ja num2
}

Leksikaalinen ympäristö itsessään on eräänlainen JavaScriptin sisäinen objekti, joka on sidottu funktioomme. Tässä tapauksessa sitä voidaan kuvata seuraavassa muodossa:

javascript{num1: 1, num2: 2}

Minkä tahansa leksikaalisen ympäristön muuttujan arvo on aina yhtä suuri kuin kyseisen muuttujan nykyinen arvo:

javascriptlet num1 = 1; // ympäristö {num1: 1}
let num2 = 2; // ympäristö {num1: 1, num2: 2}

// Muutetaan muuttujaa num1:
num1 = 123; // ympäristö {num1: 123, num2: 2}

function func() {
  
}

Kun yritämme viitata mihin tahansa muuttujaan funktion sisällä, tätä muuttujaa etsitään ensin funktion paikallisten muuttujien joukosta ja, jos sellaista muuttujaa ei ole siellä, sitä etsitään funktion leksikaalisesta ympäristöstä.