ECMAScript | Определения Асинхронных Стрелочных Функций (Async Arrow Function Definitions)

ECMAScript | Определения Асинхронных Стрелочных Функций (Async Arrow Function Definitions)

 

Синтаксис Определения Асинхронных Стрелочных Функций

AsyncArrowFunction [In, Yield, Await] :

async [не LineTerminator здесь] AsyncArrowBindingIdentifier [?Yield] [не LineTerminator здесь] => AsyncConciseBody [?In]

CoverCallExpressionAndAsyncArrowHead [?Yield, ?Await] [не LineTerminator здесь] => AsyncConciseBody [?In]

AsyncConciseBody [In] :

[lookahead ≠ {] ExpressionBody [?In, +Await]

{ AsyncFunctionBody }

AsyncArrowBindingIdentifier [Yield] :

BindingIdentifier [?Yield, +Await]

CoverCallExpressionAndAsyncArrowHead [Yield, Await] :

MemberExpression [?Yield, ?Await] Arguments [?Yield, ?Await]

 

Дополнительный синтаксис

При обработке экземпляра продукции

AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

интерпретация CoverCallExpressionAndAsyncArrowHead уточняется с использованием следующей грамматики:

AsyncArrowHead : async [не LineTerminator здесь] ArrowFormalParameters [~Yield, +Await]

 

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

AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody

AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

 

Статическая семантика: Асинхронное Лаконичное Тело Содержит Строгое Использование — AsyncConciseBodyContainsUseStrict

AsyncConciseBody : ExpressionBody

1. Вернуть false.

AsyncConciseBody : { AsyncFunctionBody }

1. Вернуть FunctionBodyContainsUseStrict из AsyncFunctionBody.

 

Семантика среды выполнения: Оценить Асинхронное Лаконичное Тело — EvaluateAsyncConciseBody

С параметрами functionObject и argumentsList (Список).

AsyncConciseBody : ExpressionBody

1. Пусть promiseCapability будет ! NewPromiseCapability(%Promise%).
2. Пусть declResult будет FunctionDeclarationInstantiation(functionObject, argumentsList).
3. Если declResult не является внезапным завершением, тогда
   а. Выполнить ! AsyncFunctionStart(promiseCapability, ExpressionBody).
4. Иначе,
   а. Выполнить ! Вызов Call(promiseCapability.[[Reject]], undefined, «declResult.[[Value]]»).
5. Вернуть завершение Completion {[[Type]]: return, [[Value]]: promiseCapability.[[Promise]], [[Target]]: empty }.

 

Семантика среды выполнения: Выражение Создание Экземпляра Асинхронной Стрелочной Функции — InstantiateAsyncArrowFunctionExpression

С необязательным параметром name.

AsyncArrowFunction : async AsyncArrowBindingIdentifier => AsyncConciseBody

1. Если имя name не указано, установите для имени name значение "".
2. Пусть область видимости scope будет LexicalEnvironment текущего контекста выполнения.
3. Пусть privateScope будет PrivateEnvironment текущего контекста выполнения.
4. Пусть sourceText будет исходным текстом, которому соответствует функция AsyncArrowFunction.
5. Пусть параметры parameters будут AsyncArrowBindingIdentifier.
6. Пусть closure будет ! OrdinaryFunctionCreate(%AsyncFunction.prototype%, sourceText, parameters, AsyncConciseBody, lexical-this, scope, privateScope).
7. Выполните SetFunctionName(closure, name).
8. Вернуть closure.

AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

1. Если имя name не указано, установите для имени name значение "".
2. Пусть область видимости scope будет LexicalEnvironment текущего контекста выполнения.
3. Пусть privateScope будет PrivateEnvironment текущего контекста выполнения.
4. Пусть sourceText будет исходным текстом, которому соответствует функция AsyncArrowFunction.
5. Пусть head будет AsyncArrowHead, который покрывается CoverCallExpressionAndAsyncArrowHead.
6. Пусть параметры parameters будут ArrowFormalParameters из головы head.
7. Пусть closure будет ! OrdinaryFunctionCreate (%AsyncFunction.prototype%, sourceText, parameters, AsyncConciseBody, lexical-this, scope, privateScope).
8. Выполните SetFunctionName(closure, name).
9. Вернуть closure.

 

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

AsyncArrowFunction :

async AsyncArrowBindingIdentifier => AsyncConciseBody

CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody

1. Вернуть InstantiateAsyncArrowFunctionExpression из AsyncArrowFunction.

 

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

Стандарт ECMAScript — Раздел «15.9 Async Arrow Function Definitions» — https://tc39.es/ecma262/#sec-async-arrow-function-definitions