Эти операции используются во многих местах спецификации.
Оглавление
8.5.1 RS: InstantiateFunctionObject
8.5.2 RS: BindingInitialization
8.5.3 RS: IteratorBindingInitialization
8.5.4 SS: AssignmentTargetType
8.5.5 SS: PropName
8.5.1 Семантика времени выполнения: InstantiateFunctionObject
Операция InstantiateFunctionObject (Создание экземпляра функционального объекта), управляемая синтаксисом, принимает аргументы scope и privateScope. Она определяется кусочно по следующим производствам:
FunctionDeclaration :function BindingIdentifier ( FormalParameters ) { FunctionBody }function ( FormalParameters ) { FunctionBody }
1. Вернуться? InstantiateOrdinaryFunctionObject из FunctionDeclaration с областью аргументов и privateScope.
GeneratorDeclaration :function * BindingIdentifier ( FormalParameters ) { GeneratorBody }function * ( FormalParameters ) { GeneratorBody }
1. Вернуться? InstantiateGeneratorFunctionObject из GeneratorDeclaration с областью аргументов и privateScope.
AsyncGeneratorDeclaration :async function * BindingIdentifier ( FormalParameters ) { AsyncGeneratorBody }async function * ( FormalParameters ) { AsyncGeneratorBody }
1. Вернуться? InstantiateAsyncGeneratorFunctionObject из AsyncGeneratorDeclaration с областью аргументов и privateScope.
AsyncFunctionDeclaration :async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody }async function ( FormalParameters ) { AsyncFunctionBody }
1. Вернуться? InstantiateAsyncFunctionObject из AsyncFunctionDeclaration с областью аргументов и privateScope.
8.5.2 Семантика времени выполнения: BindingInitialization
Операция BindingInitialization, управляемая синтаксисом, принимает значение аргумента и среду.
Примечание
undefined передается для среды, чтобы указать, что для присвоения значения инициализации следует использовать операцию PutValue. Так обстоит дело с операторами var и списками формальных параметров некоторых нестрогих функций (см. 10.2.11). В этих случаях лексическая привязка поднимается и предварительно инициализируется до оценки ее инициализатора.
Она определяется кусочно по следующим производствам:
BindingIdentifier : Identifier
1. Пусть name будет StringValue of Identifier.
2. Вернуть? InitializeBoundName (имя, значение, среда).
BindingIdentifier : yield
1. Вернуться? InitializeBoundName («доходность», значение, среда).
BindingIdentifier : await
1. Вернуться? InitializeBoundName («ожидание», значение, среда).
BindingPattern : ObjectBindingPattern
1. Выполнить? RequireObjectCoercible (значение).
2. Вернуть результат выполнения BindingInitialization для ObjectBindingPattern, используя значение и среду в качестве аргументов.
BindingPattern : ArrayBindingPattern
1. Пусть будет iteratorRecord? GetIterator (значение).
2. Пусть результатом будет IteratorBindingInitialization из ArrayBindingPattern с аргументами iteratorRecord и environment.
3. Если iteratorRecord. [[Done]] ложен, вернуть? IteratorClose (iteratorRecord, результат).
4. Вернуть результат.
ObjectBindingPattern : { }
1. Верните NormalCompletion (пусто).
ObjectBindingPattern :{ BindingPropertyList }{ BindingPropertyList , }
1. Выполнить? PropertyBindingInitialization для BindingPropertyList с использованием значения и среды в качестве аргументов.
2. Верните NormalCompletion (пусто).
ObjectBindingPattern : { BindingRestProperty }
1. Пусть excludedNames будет новым пустым списком.
2. Вернуть результат выполнения RestBindingInitialization BindingRestProperty со значением, средой и excludedNames в качестве аргументов.
ObjectBindingPattern : { BindingPropertyList , BindingRestProperty }
1. Пусть будет excludedNames? PropertyBinding Инициализация BindingPropertyList со значением аргументов и средой.
2. Вернуть результат выполнения RestBindingInitialization BindingRestProperty с аргументами value, environment и excludedNames.
8.5.2.1 InitializeBoundName ( name, value, environment )
Абстрактная операция InitializeBoundName принимает имя аргумента (String), значение и среду. При вызове он выполняет следующие шаги:
1. Если среда не определена, тогда
а. Выполните environment.InitializeBinding (имя, значение).
b. Вернуть NormalCompletion (не определено).
2. Иначе,
а. Пусть lhs будет ResolveBinding (имя).
b. Возвращение ? PutValue (lhs, значение).
8.5.3 Семантика времени выполнения: IteratorBindingInitialization
Синтаксически управляемая операция IteratorBindingInitialization принимает аргументы iteratorRecord и environment.
Примечание
Если для среды передается undefined, это означает, что для присвоения значения инициализации следует использовать операцию PutValue. Так обстоит дело со списками формальных параметров нестрогих функций. В этом случае привязки формальных параметров предварительно инициализируются, чтобы иметь дело с возможностью нескольких параметров с одним и тем же именем.
Он определяется кусочно по следующим продукциям:
ArrayBindingPattern : [ ]
1. Верните NormalCompletion (пусто).
ArrayBindingPattern : [ Elision ]
1. Верните результат выполнения IteratorDestructuringAssignmentEvaluation для Elision с помощью iteratorRecord в качестве аргумента.
ArrayBindingPattern : [ Elisionopt BindingRestElement ]
1. Если присутствует Elision, то
а. Выполнять ? IteratorDestructuringAssignmentEvaluation of Elision с параметром iteratorRecord в качестве аргумента.
2. Верните результат выполнения IteratorBindingInitialization для BindingRestElement с помощью iteratorRecord и environment в качестве аргументов.
ArrayBindingPattern : [ BindingElementList , Elision ]
1. Выполнить? IteratorBindingInitialization для BindingElementList с iteratorRecord и средой в качестве аргументов.
2. Верните результат выполнения IteratorDestructuringAssignmentEvaluation для Elision с помощью iteratorRecord в качестве аргумента.
ArrayBindingPattern : [ BindingElementList , Elisionopt BindingRestElement ]
1. Выполнить? IteratorBindingInitialization для BindingElementList с iteratorRecord и средой в качестве аргументов.
2. Если присутствует Elision, то
а. Выполнять ? IteratorDestructuringAssignmentEvaluation of Elision с параметром iteratorRecord в качестве аргумента.
3. Верните результат выполнения IteratorBindingInitialization для BindingRestElement с помощью iteratorRecord и environment в качестве аргументов.
BindingElementList : BindingElementList , BindingElisionElement
1. Выполнить? IteratorBindingInitialization для BindingElementList с iteratorRecord и средой в качестве аргументов.
2. Вернуть результат выполнения IteratorBindingInitialization для BindingElisionElement с использованием iteratorRecord и environment в качестве аргументов.
BindingElisionElement : Elision BindingElement
1. Выполнить? IteratorDestructuringAssignmentEvaluation of Elision с параметром iteratorRecord в качестве аргумента.
2. Верните результат выполнения IteratorBindingInitialization для BindingElement с помощью iteratorRecord и environment в качестве аргументов.
SingleNameBinding : BindingIdentifier Initializeropt
1. Пусть bindingId будет StringValue для BindingIdentifier.
2. Пусть будет lhs? ResolveBinding (bindingId, среда).
3. Пусть v не определено.
4. Если iteratorRecord. [[Done]] имеет значение false, то
а. Следующим пусть будет IteratorStep (iteratorRecord).
б. Если следующее — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
c. ReturnIfAbrupt (следующий).
d. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
е. Еще,
я. Установите для v значение IteratorValue (далее).
II. Если v — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
iii. ReturnIfAbrupt (v).
5. Если инициализатор присутствует и v не определено, то
а. Если IsAnonymousFunctionDefinition (Initializer) истинно, то
я. Установите v равным результату выполнения NamedEvaluation для инициализатора с аргументом bindingId.
б. Еще,
я. Пусть defaultValue будет результатом оценки Initializer.
II. Установите v на? GetValue (defaultValue).
6. Если среда не определена, вернуть? PutValue (lhs, v).
7. Верните InitializeReferencedBinding (lhs, v).
BindingElement : BindingPattern Initializeropt
1. Пусть v не определено.
2. Если iteratorRecord. [[Done]] имеет значение false, то
а. Следующим пусть будет IteratorStep (iteratorRecord).
б. Если следующее — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
c. ReturnIfAbrupt (следующий).
d. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
е. Еще,
я. Установите для v значение IteratorValue (далее).
II. Если v — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
iii. ReturnIfAbrupt (v).
3. Если инициализатор присутствует и v не определено, то
а. Пусть defaultValue будет результатом оценки Initializer.
б. Установите v на? GetValue (defaultValue).
4. Верните результат выполнения BindingInitialization для BindingPattern с v и средой в качестве аргументов.
BindingRestElement : … BindingIdentifier
1. Пусть будет lhs? ResolveBinding (StringValue of BindingIdentifier, среда).
2. Пусть будет А! ArrayCreate (0).
3. Пусть n равно 0.
4. Повторите,
а. Если iteratorRecord. [[Done]] false, то
я. Следующим пусть будет IteratorStep (iteratorRecord).
II. Если следующее — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
iii. ReturnIfAbrupt (следующий).
iv. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
б. Если iteratorRecord. [[Done]] истинно, то
я. Если среда не определена, вернуть? PutValue (lhs, A).
II. Верните InitializeReferencedBinding (lhs, A).
c. Пусть nextValue будет IteratorValue (next).
d. Если nextValue является внезапным завершением, установите для iteratorRecord. [[Done]] значение true.
е. ReturnIfAbrupt (nextValue).
f. Выполнять ! CreateDataPropertyOrThrow (A,! ToString (𝔽 (n)), nextValue).
грамм. Установите n равным n + 1.
BindingRestElement : … BindingPattern
1. Пусть A будет! ArrayCreate (0).
2. Пусть n равно 0.
3. Повторите,
а. Если iteratorRecord. [[Done]] false, то
я. Следующим пусть будет IteratorStep (iteratorRecord).
II. Если следующее — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
iii. ReturnIfAbrupt (следующий).
iv. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
б. Если iteratorRecord. [[Done]] истинно, то
я. Верните результат выполнения BindingInitialization BindingPattern с A и средой в качестве аргументов.
c. Пусть nextValue будет IteratorValue (next).
d. Если nextValue является внезапным завершением, установите для iteratorRecord. [[Done]] значение true.
е. ReturnIfAbrupt (nextValue).
f. Выполнять ! CreateDataPropertyOrThrow (A,! ToString (𝔽 (n)), nextValue).
грамм. Установите n равным n + 1.
FormalParameters : [empty]
1. Верните NormalCompletion (пусто).
FormalParameters : FormalParameterList , FunctionRestParameter
1. Выполнить? IteratorBindingInitialization для FormalParameterList с использованием iteratorRecord и окружения в качестве аргументов.
2. Вернуть результат выполнения IteratorBindingInitialization для FunctionRestParameter с использованием iteratorRecord и environment в качестве аргументов.
FormalParameterList : FormalParameterList , FormalParameter
1. Выполнить? IteratorBindingInitialization для FormalParameterList с использованием iteratorRecord и окружения в качестве аргументов.
2. Вернуть результат выполнения IteratorBindingInitialization для FormalParameter с использованием iteratorRecord и environment в качестве аргументов.
ArrowParameters : BindingIdentifier
1. Пусть v не определено.
2. Утверждение: iteratorRecord. [[Done]] ложно.
3. Пусть следующим будет IteratorStep (iteratorRecord).
4. Если далее происходит внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
5. ReturnIfAbrupt (следующий).
6. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
7. Иначе,
а. Установите для v значение IteratorValue (далее).
б. Если v — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
c. ReturnIfAbrupt (v).
8. Верните результат выполнения BindingInitialization для BindingIdentifier, используя v и среду в качестве аргументов.
ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
1. Пусть формальные формы будут параметрами ArrowFormalParameters, которые покрываются CoverParenthesizedExpressionAndArrowParameterList.
2. Вернуть IteratorBindingInitialization формалов с аргументами iteratorRecord и environment.
AsyncArrowBindingIdentifier : BindingIdentifier
1. Пусть v не определено.
2. Утверждение: iteratorRecord. [[Done]] ложно.
3. Пусть следующим будет IteratorStep (iteratorRecord).
4. Если далее происходит внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
5. ReturnIfAbrupt (следующий).
6. Если значение next равно false, установите для iteratorRecord. [[Done]] значение true.
7. Иначе,
а. Установите для v значение IteratorValue (далее).
б. Если v — внезапное завершение, установите для iteratorRecord. [[Done]] значение true.
c. ReturnIfAbrupt (v).
8. Верните результат выполнения BindingInitialization для BindingIdentifier, используя v и среду в качестве аргументов.
8.5.4 Статическая семантика: AssignmentTargetType
Синтаксически управляемая операция AssignmentTargetType (Тип цели назначения) не принимает аргументов. Она определяется кусочно по следующим производствам:
IdentifierReference : Identifier
1. Если это IdentifierReference содержится в коде строгого режима, а StringValue идентификатора — «eval» или «arguments», возврат недопустим.
2. Вернуть simple.
IdentifierReference :yieldawaitCallExpression :CallExpression [ Expression ]CallExpression . IdentifierNameCallExpression . PrivateIdentifierMemberExpression :MemberExpression [ Expression ]MemberExpression . IdentifierNameSuperPropertyMemberExpression . PrivateIdentifier
1. Вернуть simple.
CoverParenthesizedExpressionAndArrowParameterList
1. Пусть expr будет ParenthesizedExpression, которое покрывается CoverParenthesizedExpressionAndArrowParameterList.
2. Вернуть AssignmentTargetType выражения expr.
PrimaryExpression :thisLiteralArrayLiteralObjectLiteralFunctionExpressionClassExpressionGeneratorExpressionAsyncFunctionExpressionAsyncGeneratorExpressionRegularExpressionLiteralTemplateLiteralCallExpression :CoverCallExpressionAndAsyncArrowHeadSuperCallImportCallCallExpression ArgumentsCallExpression TemplateLiteralNewExpression :new NewExpressionMemberExpression :MemberExpression TemplateLiteralnew MemberExpression ArgumentsNewTarget :new . targetImportMeta :import . metaLeftHandSideExpression :OptionalExpressionUpdateExpression :LeftHandSideExpression ++LeftHandSideExpression —++ UnaryExpression— UnaryExpressionUnaryExpression :delete UnaryExpressionvoid UnaryExpressiontypeof UnaryExpression+ UnaryExpression— UnaryExpression~ UnaryExpression! UnaryExpressionAwaitExpressionExponentiationExpression :UpdateExpression ** ExponentiationExpressionMultiplicativeExpression :MultiplicativeExpression MultiplicativeOperator ExponentiationExpressionAdditiveExpression :AdditiveExpression + MultiplicativeExpressionAdditiveExpression — MultiplicativeExpressionShiftExpression :ShiftExpression << AdditiveExpressionShiftExpression >> AdditiveExpressionShiftExpression >>> AdditiveExpressionRelationalExpression :RelationalExpression < ShiftExpressionRelationalExpression > ShiftExpressionRelationalExpression <= ShiftExpressionRelationalExpression >= ShiftExpressionRelationalExpression instanceof ShiftExpressionRelationalExpression in ShiftExpressionPrivateIdentifier in ShiftExpressionEqualityExpression :EqualityExpression == RelationalExpressionEqualityExpression != RelationalExpressionEqualityExpression === RelationalExpressionEqualityExpression !== RelationalExpressionBitwiseANDExpression :BitwiseANDExpression & EqualityExpressionBitwiseXORExpression :BitwiseXORExpression ^ BitwiseANDExpressionBitwiseORExpression :BitwiseORExpression | BitwiseXORExpressionLogicalANDExpression :LogicalANDExpression && BitwiseORExpressionLogicalORExpression :LogicalORExpression || LogicalANDExpressionCoalesceExpression :CoalesceExpressionHead ?? BitwiseORExpressionConditionalExpression :ShortCircuitExpression ? AssignmentExpression : AssignmentExpressionAssignmentExpression :YieldExpressionArrowFunctionAsyncArrowFunctionLeftHandSideExpression = AssignmentExpressionLeftHandSideExpression AssignmentOperator AssignmentExpressionLeftHandSideExpression &&= AssignmentExpressionLeftHandSideExpression ||= AssignmentExpressionLeftHandSideExpression ??= AssignmentExpressionExpression :Expression , AssignmentExpression
1. Вернуть invalid.
8.5.5 Статическая семантика: PropName
Операция PropName (Имя Свойства), управляемая синтаксисом, не принимает аргументов. Она определяется кусочно по следующим производствам:
PropertyDefinition : IdentifierReference
1. Вернуть строковое значение ссылки на идентификатор.
PropertyDefinition : … AssignmentExpression
1. Вернуть empty.
PropertyDefinition : PropertyName : AssignmentExpression
1. Верните PropName для PropertyName.
LiteralPropertyName : IdentifierName
1. Верните StringValue для IdentifierName.
LiteralPropertyName : StringLiteral
1. Верните SV StringLiteral.
LiteralPropertyName : NumericLiteral
1. Пусть nbr будет числовым значением NumericLiteral.
2. Вернитесь! ToString (число).
ComputedPropertyName : [ AssignmentExpression ]
1. Вернуть empty.
ClassElementName ( UniqueFormalParameters ) { FunctionBody }get ClassElementName ( ) { FunctionBody }set ClassElementName ( PropertySetParameterList ) { FunctionBody }
1. Верните PropName из ClassElementName.
GeneratorMethod : * ClassElementName ( UniqueFormalParameters ) { GeneratorBody }
1. Верните PropName из ClassElementName.
AsyncGeneratorMethod : async * ClassElementName ( UniqueFormalParameters ) { AsyncGeneratorBody }
1. Верните PropName из ClassElementName.
ClassElement : ClassStaticBlock
1. Вернуть empty.
ClassElement : ;
1. Вернуть empty.
AsyncMethod : async ClassElementName ( UniqueFormalParameters ) { AsyncFunctionBody }
1. Верните PropName из ClassElementName.
FieldDefinition : ClassElementName Initializeropt
1. Верните PropName из ClassElementName.
ClassElementName : PrivateIdentifier
1. Вернуть empty.
Информационные ссылки
Стандарт ECMAScript — Раздел «8.5 Miscellaneous» — https://tc39.es/ecma262/#sec-syntax-directed-operations-miscellaneous