Синтаксис Определения Стрелочных Функций
ArrowFunction [In, Yield, Await] :
ArrowParameters [?Yield, ?Await] [не LineTerminator здесь] => ConciseBody [?In]
ArrowParameters [Yield, Await] :
BindingIdentifier [?Yield, ?Await]
CoverParenthesizedExpressionAndArrowParameterList [?Yield, ?Await]
ConciseBody [In] :
[lookahead ≠ {] ExpressionBody [?In, ~Await]
{ FunctionBody [~Yield, ~Await] }
ExpressionBody [In, Await] :
AssignmentExpression [?In, ~Yield, ?Await]
Дополнительный синтаксис
При обработке экземпляра продукции
ArrowParameters [Yield, Await] : CoverParenthesizedExpressionAndArrowParameterList [?Yield, ?Await]
интерпретация CoverParenthesizedExpressionAndArrowParameterList уточняется с использованием следующей грамматики:
ArrowFormalParameters [Yield, Await] :
( UniqueFormalParameters [?Yield, ?Await] )
Статическая семантика: ранние ошибки
ArrowFunction : ArrowParameters => ConciseBody
- Это синтаксическая ошибка, если ArrowParameters Содержит YieldExpression является true (истинно).
- Это синтаксическая ошибка, если ArrowParameters Содержит AwaitExpression является true (истинно).
- Это синтаксическая ошибка, если ConciseBodyContainsUseStrict из ConciseBody имеет значение true, а IsSimpleParameterList из ArrowParameters — false.
- Это синтаксическая ошибка, если какой-либо элемент BoundNames из ArrowParameters также встречается в LexicallyDeclaredNames из ConciseBody.
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
- Это синтаксическая ошибка, если CoverParenthesizedExpressionAndArrowParameterList не покрывает ArrowFormalParameters.
- Все правила ранних ошибок для ArrowFormalParameters и производных от него производных также применяются к ArrowFormalParameters, который покрывается CoverParenthesizedExpressionAndArrowParameterList.
Статическая семантика: Лаконичное тело содержит строгое использование — ConciseBodyContainsUseStrict
1. Вернуть false.
ConciseBody : { FunctionBody }
1. Вернуть FunctionBodyContainsUseStrict из FunctionBody.
Семантика среды выполнения: Оценка Лаконичного Тела — EvaluateConciseBody
С параметрами functionObject и argumentsList (Список).
1. Выполнить ? FunctionDeclarationInstantiation(functionObject, argumentsList). 2. Верните результат вычисления ExpressionBody.
Семантика среды выполнения: Выражение Создания Экземпляра Стрелочной Функции — InstantiateArrowFunctionExpression
С необязательным параметром name.
ArrowFunction : ArrowParameters => ConciseBody
1. Если имя name не указано, установите для имени name значение "". 2. Пусть область видимости scope будет LexicalEnvironment текущего контекста выполнения. 3. Пусть privateScope будет PrivateEnvironment текущего контекста выполнения. 4. Пусть sourceText будет исходным текстом, сопоставленным ArrowFunction. 5. Пусть замыкание closure будет OrdinaryFunctionCreate(%Function.prototype%, sourceText, ArrowParameters, ConciseBody, lexical-this, scope, privateScope). 6. Выполните SetFunctionName(closure, name). 7. Верните closure.
ArrowFunction не определяет локальные привязки для arguments
, super
, this
или new.target
. Любая ссылка на arguments
, super
, this
или new.target
в ArrowFunction должна разрешаться в привязку в лексически включающей среде. Обычно это будет функциональная среда непосредственно включающей функции. Несмотря на то, что ArrowFunction может содержать ссылки на super
, объект функции, созданный на шаге 5, не превращается в метод путем выполнения MakeMethod. ArrowFunction, которая ссылается на super
, всегда содержится в не-ArrowFunction, и необходимое состояние для реализации super
доступно через область scope, которая захватывается функциональным объектом ArrowFunction.
Семантика времени выполнения: Оценка
ArrowFunction : ArrowParameters => ConciseBody
1. Вернуть InstantiateArrowFunctionExpression из ArrowFunction.
ExpressionBody : AssignmentExpression
1. Пусть exprRef будет результатом вычисления AssignmentExpression. 2. Пусть exprValue будет ? GetValue(exprRef). 3. Вернуть Завершение Completion { [[Type]]: return, [[Value]]: exprValue, [[Target]]: empty }.
Информационные ссылки
Стандарт ECMAScript — Раздел «15.3 Arrow Function Definitions» — https://tc39.es/ecma262/#sec-arrow-function-definitions