Синтаксис Определения Асинхронных Стрелочных Функций
AsyncArrowFunction [In, Yield, Await] :
async [не LineTerminator здесь] AsyncArrowBindingIdentifier [?Yield] [не LineTerminator здесь] => AsyncConciseBody [?In]
CoverCallExpressionAndAsyncArrowHead [?Yield, ?Await] [не LineTerminator здесь] => AsyncConciseBody [?In]
AsyncConciseBody [In] :
[lookahead ≠ {] ExpressionBody [?In, +Await]
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
- Синтаксическая ошибка, если какой-либо элемент BoundNames из AsyncArrowBindingIdentifier также встречается в LexicallyDeclaredNames из AsyncConciseBody.
AsyncArrowFunction : CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody
- Это синтаксическая ошибка, если CoverCallExpressionAndAsyncArrowHead Содержит YieldExpression является true (истинно).
- Это синтаксическая ошибка, если CoverCallExpressionAndAsyncArrowHead Содержит AwaitExpression является true (истинно).
- Это синтаксическая ошибка, если CoverCallExpressionAndAsyncArrowHead не покрывает AsyncArrowHead.
- Синтаксическая ошибка возникает, если какой-либо элемент BoundNames из CoverCallExpressionAndAsyncArrowHead также встречается в LexicallyDeclaredNames из AsyncConciseBody.
- Это синтаксическая ошибка, если AsyncConciseBodyContainsUseStrict для AsyncConciseBody имеет значение true, а IsSimpleParameterList для CoverCallExpressionAndAsyncArrowHead — false.
- Все правила ранней ошибки для AsyncArrowHead и производных от него производств применяются к AsyncArrowHead, который покрывается CoverCallExpressionAndAsyncArrowHead.
Статическая семантика: Асинхронное Лаконичное Тело Содержит Строгое Использование — 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
async AsyncArrowBindingIdentifier => AsyncConciseBody
CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody
1. Вернуть InstantiateAsyncArrowFunctionExpression из AsyncArrowFunction.
Информационные ссылки
Стандарт ECMAScript — Раздел «15.9 Async Arrow Function Definitions» — https://tc39.es/ecma262/#sec-async-arrow-function-definitions