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

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

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

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 : CoverParenthesizedExpressionAndArrowParameterList

 

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

ConciseBody : ExpressionBody

1. Вернуть false.

ConciseBody : { FunctionBody }

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

 

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

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

ConciseBody : ExpressionBody

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 не определяет локальные привязки для argumentssuperthis или new.target. Любая ссылка на argumentssuperthis или 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