Определение стрелочной функции (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 содержит YieldExpression истинно — true
- Это синтаксическая ошибка, если ArrowParameters содержит AwaitExpression истинно- true
- Это синтаксическая ошибка, если ConciseBodyContainsUseStrict для ConciseBody имеет значение true, а IsSimpleParameterList для ArrowParameters — false.
- Это синтаксическая ошибка, если какой-либо элемент BoundNames из ArrowParameters также встречается в LexicallyDeclaredNames из ConciseBody.
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
- Это синтаксическая ошибка, если CoverParenthesizedExpressionAndArrowParameterList не покрывает ArrowFormalParameters.
- Все правила ранних ошибок для ArrowFormalParameters и производных от него также применяются к CoveredFormalsList из CoverParenthesizedExpressionAndArrowParameterList.
Статическая семантика: ConciseBodyContainsUseStrict
1. Вернуть false.
ConciseBody : { FunctionBody }
1. Вернуть FunctionBodyContainsUseStrict из FunctionBody.
Статическая семантика: CoveredFormalsList
ArrowParameters : BindingIdentifier
1. Вернуть эти ArrowParameters.
CoverParenthesizedExpressionAndArrowParameterList :
( Expression )
( Expression , )
( )
( … BindingIdentifier )
( … BindingPattern )
( Expression , … BindingIdentifier )
( Expression , … BindingPattern )
1. Вернуть ArrowFormalParameters которые покрываются CoverParenthesizedExpressionAndArrowParameterList.
Семантика среды выполнения: EvaluateConciseBody
С параметрами functionObject и argumentsList (Список).
1. Выполнить ? FunctionDeclarationInstantiation(functionObject, argumentsList). 2. Вернуть результат оценки ExpressionBody.
Семантика среды выполнения: InstantiateArrowFunctionExpression
С необязательным параметром name.
ArrowFunction : ArrowParameters => ConciseBody
1. Если name отсутствует, установите для name значение "". 2. Пусть область видимости scope будет LexicalEnvironment текущего контекста выполнения. 3. Пусть sourceText будет исходным текстом, сопоставленным ArrowFunction. 4. Пусть parameters будут CoveredFormalsList из ArrowParameters. 5. Пусть замыкание closure будет OrdinaryFunctionCreate(%Function.prototype%, sourceText, parameters, ConciseBody, lexical-this, scope). 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