зачем нам в первую очередь нужна VariableEnvironment, если a LexcicalEnvironment кажется достаточно для отслеживания привязок переменных и значений?
Причина VariableEnviron mnet заключается в том, чтобы убедитесь, что существует локальная область действия, которую можно использовать, которая не мешает существующим областям. Без VariableEnvironment вообще не было бы области видимости, поскольку LexicalEnvironment постоянно изменялась бы при выполнении кода.
VariableEnvironment - определяет лексическое окружение, EnvironmentRecord которого содержит привязки, созданные с помощью VariableStatements в этом контексте выполнения.
Это определенно необходимо.
На этапе создания контекста выполнения функции оператор if Заблокировать будет ли оно пропущено?
Нет, не будет. Операторы if
не являются триггерами для новых контекстов выполнения, и в результате эта область видимости будет частью переменной среды функции, которая будет содержать внутреннюю лексическую среду.
Принадлежит ли e к лексической Окружение IfStatementBlock или FunctionDeclaration?
Поднимается переменная e
, так как это var
, и как таковая она является частью среды переменных для функции x. Значение d
является частью внутренней LexicalEnvironment, созданной в результате объявления let
внутри блока if
.