ECMAScript | Оператор with

Синтаксис оператора with

WithStatement [Yield, Await, Return] :

with ( Expression [+In, ?Yield, ?Await] ) Statement [?Yield, ?Await, ?Return]

Примечание

Оператор with добавляет объект Environment Record для вычисляемого объекта в лексическую среду текущего контекста выполнения. Затем он выполняет инструкцию, используя эту расширенную лексическую среду. Наконец, восстанавливается исходная лексическая среда.

14.11.1 Статическая семантика: Ранние Ошибки

WithStatement : with ( Expression ) Statement

  • Это синтаксическая ошибка, если код, соответствующий этому производству, содержится в коде строгого режима.
  • Это синтаксическая ошибка, если IsLabelledFunction(Statement) является true (истинно).
Примечание

Второе правило необходимо применять только в том случае, если реализовано расширение, указанное в разделе B.3.1.

 

14.11.2 Семантика времени выполнения: Оценка

WithStatement : with ( Expression ) Statement

1. Пусть val будет результатом вычисления выражения Expression.
2. Пусть obj будет ? ToObject(? GetValue(val)).
3. Пусть oldEnv будет LexicalEnvironment текущего контекста выполнения.
4. Пусть newEnv будет NewObjectEnvironment(obj, true, oldEnv).
5. Установите для LexicalEnvironment текущего контекста выполнения значение newEnv.
6. Пусть C будет результатом оценки Statement.
7. Установите LexicalEnvironment текущего контекста выполнения на oldEnv.
8. Вернуть Завершение(UpdateEmpty (C, undefined)).
Примечание

Независимо от того, как управление покидает внедренный оператор Statement, обычно или в результате какой-либо формы внезапного завершения или исключения, LexicalEnvironment всегда возвращается в свое прежнее состояние.

 

Информационные ссылки

Стандарт ECMAScript — Раздел «14.11 The with Statement» — https://tc39.es/ecma262/#sec-with-statement

Поделись записью