В чём разница между `LexicalEnvironment` и `VariableEnvironment`?
УглублённыйОбласть видимости и замыкания
VariableEnvironment — фиксируется при создании EC, хранит только var объявления
LexicalEnvironment — изначально указывает на тот же Environment Record, но может изменяться при входе в блок {}:
- При входе в блок
{ let x = 1; } создаётся новый LexicalEnvironment для блока
VariableEnvironment не меняется — var остаётся в функциональном scope
- Именно поэтому
let/const имеют блочную область видимости, а var — функциональную