Лексічнае асяроддзе функцый у 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() {
  
}

Калі мы спрабуем звярнуцца да якой-небудзь зменнай унутры функцыі, гэтая зменная спачатку шукаецца сярод лакальных зменных функцыі і, калі такой зменнай там няма, то шукаецца ў лексічным асяроддзі функцыі.