-title: Proposal Title Goes Here
-stage: -1
-contributors: Your Name(s) Here
+title: Discard Bindings
+status: proposal
+stage: 1
+contributors: Ron Buckton, Ecma International
-
-
This is an emu-clause
-
This is an algorithm:
-
- 1. Let _proposal_ be *undefined*.
- 1. If IsAccepted(_proposal_) is *true*, then
- 1. Let _stage_ be *0*ℤ.
- 1. Else,
- 1. Let _stage_ be *-1*ℤ.
- 1. Return ? ToString(_stage_).
-
+
+
+
+
Static Semantics: BoundNames ( ): a List of Strings
+
+
+
+
*"\*default\*"* is used within this specification as a synthetic name for a module's default export when it does not have another name. An entry in the module's [[Environment]] is created with that name and holds the corresponding value, and resolving the export named *"default"* by calling for the module will return a ResolvedBinding Record whose [[BindingName]] is *"\*default\*"*, which will then resolve in the module's [[Environment]] to the above-mentioned value. This is done only for ease of specification, so that anonymous default exports can be resolved like any other export. This *"\*default\*"* string is never accessible to ECMAScript code or to the module linking algorithm.
+
+ BindingIdentifier : Identifier
+
+ 1. Return a List whose sole element is the StringValue of |Identifier|.
+
+ BindingIdentifier : `yield`
+
+ 1. Return « *"yield"* ».
+
+ BindingIdentifier : `await`
+
+ 1. Return « *"await"* ».
+
+ LexicalDeclaration : LetOrConst BindingList `;`
+
+ 1. Return the BoundNames of |BindingList|.
+
+
+ UsingDeclaration :
+ `using` BindingList `;`
+
+ AwaitUsingDeclaration :
+ CoverAwaitExpressionAndAwaitUsingDeclarationHead BindingList `;`
+
+
+ 1. Return the BoundNames of |BindingList|.
+
+ BindingList : BindingList `,` LexicalBinding
+
+ 1. Let _names1_ be the BoundNames of |BindingList|.
+ 1. Let _names2_ be the BoundNames of |LexicalBinding|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ LexicalBinding : BindingIdentifier Initializer?
+
+ 1. Return the BoundNames of |BindingIdentifier|.
+
+ LexicalBinding : BindingPattern Initializer
+
+ 1. Return the BoundNames of |BindingPattern|.
+
+
+ LexicalBinding : `void` Initializer
+
+ 1. Return a new empty List.
+
+
+ VariableDeclarationList : VariableDeclarationList `,` VariableDeclaration
+
+ 1. Let _names1_ be BoundNames of |VariableDeclarationList|.
+ 1. Let _names2_ be BoundNames of |VariableDeclaration|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ VariableDeclaration : BindingIdentifier Initializer?
+
+ 1. Return the BoundNames of |BindingIdentifier|.
+
+ VariableDeclaration : BindingPattern Initializer
+
+ 1. Return the BoundNames of |BindingPattern|.
+
+
+ BindingPattern : `void`
+
+ 1. Return a new empty List.
+
+
+ ObjectBindingPattern : `{` `}`
+
+ 1. Return a new empty List.
+
+ ObjectBindingPattern : `{` BindingPropertyList `,` BindingRestProperty `}`
+
+ 1. Let _names1_ be BoundNames of |BindingPropertyList|.
+ 1. Let _names2_ be BoundNames of |BindingRestProperty|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ ArrayBindingPattern : `[` Elision? `]`
+
+ 1. Return a new empty List.
+
+ ArrayBindingPattern : `[` Elision? BindingRestElement `]`
+
+ 1. Return the BoundNames of |BindingRestElement|.
+
+ ArrayBindingPattern : `[` BindingElementList `,` Elision? `]`
+
+ 1. Return the BoundNames of |BindingElementList|.
+
+ ArrayBindingPattern : `[` BindingElementList `,` Elision? BindingRestElement `]`
+
+ 1. Let _names1_ be BoundNames of |BindingElementList|.
+ 1. Let _names2_ be BoundNames of |BindingRestElement|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ BindingPropertyList : BindingPropertyList `,` BindingProperty
+
+ 1. Let _names1_ be BoundNames of |BindingPropertyList|.
+ 1. Let _names2_ be BoundNames of |BindingProperty|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ BindingElementList : BindingElementList `,` BindingElisionElement
+
+ 1. Let _names1_ be BoundNames of |BindingElementList|.
+ 1. Let _names2_ be BoundNames of |BindingElisionElement|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ BindingElisionElement : Elision? BindingElement
+
+ 1. Return BoundNames of |BindingElement|.
+
+ BindingProperty : PropertyName `:` BindingElement
+
+ 1. Return the BoundNames of |BindingElement|.
+
+ SingleNameBinding : BindingIdentifier Initializer?
+
+ 1. Return the BoundNames of |BindingIdentifier|.
+
+ BindingElement : BindingPattern Initializer?
+
+ 1. Return the BoundNames of |BindingPattern|.
+
+ ForDeclaration : LetOrConst ForBinding
+
+ 1. Return the BoundNames of |ForBinding|.
+
+ FunctionDeclaration : `function` BindingIdentifier `(` FormalParameters `)` `{` FunctionBody `}`
+
+ 1. Return the BoundNames of |BindingIdentifier|.
+
+ FunctionDeclaration : `function` `(` FormalParameters `)` `{` FunctionBody `}`
+
+ 1. Return « *"\*default\*"* ».
+
+ FormalParameters : [empty]
+
+ 1. Return a new empty List.
+
+ FormalParameters : FormalParameterList `,` FunctionRestParameter
+
+ 1. Let _names1_ be BoundNames of |FormalParameterList|.
+ 1. Let _names2_ be BoundNames of |FunctionRestParameter|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ FormalParameterList : FormalParameterList `,` FormalParameter
+
+ 1. Let _names1_ be BoundNames of |FormalParameterList|.
+ 1. Let _names2_ be BoundNames of |FormalParameter|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ ArrowParameters : CoverParenthesizedExpressionAndArrowParameterList
+
+ 1. Let _formals_ be the |ArrowFormalParameters| that is covered by |CoverParenthesizedExpressionAndArrowParameterList|.
+ 1. Return the BoundNames of _formals_.
+
+ GeneratorDeclaration : `function` `*` BindingIdentifier `(` FormalParameters `)` `{` GeneratorBody `}`
+
+ 1. Return the BoundNames of |BindingIdentifier|.
+
+ GeneratorDeclaration : `function` `*` `(` FormalParameters `)` `{` GeneratorBody `}`
+
+ 1. Return « *"\*default\*"* ».
+
+ AsyncGeneratorDeclaration : `async` `function` `*` BindingIdentifier `(` FormalParameters `)` `{` AsyncGeneratorBody `}`
+
+ 1. Return the BoundNames of |BindingIdentifier|.
+
+ AsyncGeneratorDeclaration : `async` `function` `*` `(` FormalParameters `)` `{` AsyncGeneratorBody `}`
+
+ 1. Return « *"\*default\*"* ».
+
+ ClassDeclaration : `class` BindingIdentifier ClassTail
+
+ 1. Return the BoundNames of |BindingIdentifier|.
+
+ ClassDeclaration : `class` ClassTail
+
+ 1. Return « *"\*default\*"* ».
+
+
+ AsyncFunctionDeclaration : `async` `function` BindingIdentifier `(` FormalParameters `)` `{` AsyncFunctionBody `}`
+
+
+ 1. Return the BoundNames of |BindingIdentifier|.
+
+
+ AsyncFunctionDeclaration : `async` `function` `(` FormalParameters `)` `{` AsyncFunctionBody `}`
+
+
+ 1. Return « *"\*default\*"* ».
+
+
+ CoverCallExpressionAndAsyncArrowHead : MemberExpression Arguments
+
+
+ 1. Let _head_ be the |AsyncArrowHead| that is covered by |CoverCallExpressionAndAsyncArrowHead|.
+ 1. Return the BoundNames of _head_.
+
+ ImportDeclaration : `import` ImportClause FromClause `;`
+
+ 1. Return the BoundNames of |ImportClause|.
+
+ ImportDeclaration : `import` ModuleSpecifier `;`
+
+ 1. Return a new empty List.
+
+ ImportClause : ImportedDefaultBinding `,` NameSpaceImport
+
+ 1. Let _names1_ be the BoundNames of |ImportedDefaultBinding|.
+ 1. Let _names2_ be the BoundNames of |NameSpaceImport|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ ImportClause : ImportedDefaultBinding `,` NamedImports
+
+ 1. Let _names1_ be the BoundNames of |ImportedDefaultBinding|.
+ 1. Let _names2_ be the BoundNames of |NamedImports|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ NamedImports : `{` `}`
+
+ 1. Return a new empty List.
+
+ ImportsList : ImportsList `,` ImportSpecifier
+
+ 1. Let _names1_ be the BoundNames of |ImportsList|.
+ 1. Let _names2_ be the BoundNames of |ImportSpecifier|.
+ 1. Return the list-concatenation of _names1_ and _names2_.
+
+ ImportSpecifier : ModuleExportName `as` ImportedBinding
+
+ 1. Return the BoundNames of |ImportedBinding|.
+
+
+ ExportDeclaration :
+ `export` ExportFromClause FromClause `;`
+ `export` NamedExports `;`
+
+
+ 1. Return a new empty List.
+
+ ExportDeclaration : `export` VariableStatement
+
+ 1. Return the BoundNames of |VariableStatement|.
+
+ ExportDeclaration : `export` Declaration
+
+ 1. Return the BoundNames of |Declaration|.
+
+ ExportDeclaration : `export` `default` HoistableDeclaration
+
+ 1. Let _declarationNames_ be the BoundNames of |HoistableDeclaration|.
+ 1. If _declarationNames_ does not include the element *"\*default\*"*, append *"\*default\*"* to _declarationNames_.
+ 1. Return _declarationNames_.
+
+ ExportDeclaration : `export` `default` ClassDeclaration
+
+ 1. Let _declarationNames_ be the BoundNames of |ClassDeclaration|.
+ 1. If _declarationNames_ does not include the element *"\*default\*"*, append *"\*default\*"* to _declarationNames_.
+ 1. Return _declarationNames_.
+
+ ExportDeclaration : `export` `default` AssignmentExpression `;`
+
+ 1. Return « *"\*default\*"* ».
+
+
+
+
+
+
+ Runtime Semantics: BindingInitialization (
+ _value_: an ECMAScript language value,
+ _environment_: an Environment Record or *undefined*,
+ ): either a normal completion containing ~unused~ or an abrupt completion
+
+
+
+
+
*undefined* is passed for _environment_ to indicate that a PutValue operation should be used to assign the initialization value. This is the case for `var` statements and formal parameter lists of some non-strict functions (See ). In those cases a lexical binding is hoisted and preinitialized prior to evaluation of its initializer.
+
+ BindingIdentifier : Identifier
+
+ 1. Let _name_ be StringValue of |Identifier|.
+ 1. Return ? InitializeBoundName(_name_, _value_, _environment_).
+
+ BindingIdentifier : `yield`
+
+ 1. Return ? InitializeBoundName(*"yield"*, _value_, _environment_).
+
+ BindingIdentifier : `await`
+
+ 1. Return ? InitializeBoundName(*"await"*, _value_, _environment_).
+
+ BindingPattern : ObjectBindingPattern
+
+ 1. Perform ? RequireObjectCoercible(_value_).
+ 1. Return ? BindingInitialization of |ObjectBindingPattern| with arguments _value_ and _environment_.
+
+ BindingPattern : ArrayBindingPattern
+
+ 1. Let _iteratorRecord_ be ? GetIterator(_value_, ~sync~).
+ 1. Let _result_ be Completion(IteratorBindingInitialization of |ArrayBindingPattern| with arguments _iteratorRecord_ and _environment_).
+ 1. If _iteratorRecord_.[[Done]] is *false*, return ? IteratorClose(_iteratorRecord_, _result_).
+ 1. Return ? _result_.
+
+
+ BindingPattern : `void`
+
+ 1. Return ~unused~.
+
+
+ ObjectBindingPattern : `{` `}`
+
+ 1. Return ~unused~.
+
+
+ ObjectBindingPattern :
+ `{` BindingPropertyList `}`
+ `{` BindingPropertyList `,` `}`
+
+
+ 1. Perform ? PropertyBindingInitialization of |BindingPropertyList| with arguments _value_ and _environment_.
+ 1. Return ~unused~.
+
+ ObjectBindingPattern : `{` BindingRestProperty `}`
+
+ 1. Let _excludedNames_ be a new empty List.
+ 1. Return ? RestBindingInitialization of |BindingRestProperty| with arguments _value_, _environment_, and _excludedNames_.
+
+ ObjectBindingPattern : `{` BindingPropertyList `,` BindingRestProperty `}`
+
+ 1. Let _excludedNames_ be ? PropertyBindingInitialization of |BindingPropertyList| with arguments _value_ and _environment_.
+ 1. Return ? RestBindingInitialization of |BindingRestProperty| with arguments _value_, _environment_, and _excludedNames_.
+
+
+
+
+
+
+
+ In certain circumstances when processing an instance of the production
+ UnaryExpression : CoverVoidExpressionAndVoidDiscard
+ the interpretation of |CoverVoidExpressionAndVoidDiscard| is refined using the following grammar:
+
+
+
+ UnaryExpression : CoverVoidExpressionAndVoidDiscard
+
+
+ 1. Let _voidExpr_ be the |VoidExpression| that is covered by |CoverVoidExpressionAndVoidDiscard|.
+ 1. Let _expr_ be ? Evaluation of _voidExpr_.
+ 1. Perform ? GetValue(_expr_).
+ 1. Return *undefined*.
+
+
+
+ UnaryExpression : `void` UnaryExpression
+ VoidExpression : `void` UnaryExpression
+
+
+ 1. Let _expr_ be ? Evaluation of |UnaryExpression|.
+ 1. Perform ? GetValue(_expr_).
+ 1. Return *undefined*.
+
+
+
GetValue must be called even though its value is not used because it may have observable side-effects.
+
+
+
+
+
+
+
Assignment Operators
+
+
+
+
Destructuring Assignment
+
Supplemental Syntax
+
+ In certain circumstances when processing an instance of the production
+ AssignmentExpression : LeftHandSideExpression `=` AssignmentExpression
+ the interpretation of |LeftHandSideExpression| is refined using the following grammar:
+
+ If |LeftHandSideExpression| is either an |ObjectLiteral| or an |ArrayLiteral|, |LeftHandSideExpression| must cover an |AssignmentPattern|.
+
+
+ If |LeftHandSideExpression| is neither an |ObjectLiteral| nor an |ArrayLiteral|, it is a Syntax Error if AssignmentTargetType of |LeftHandSideExpression| is not ~simple~.
+
+
+
+
+
+
+ Runtime Semantics: IteratorDestructuringAssignmentEvaluation (
+ _iteratorRecord_: an Iterator Record,
+ ): either a normal completion containing ~unused~ or an abrupt completion
+
+
+
+ AssignmentElementList : AssignmentElisionElement
+
+ 1. Return ? IteratorDestructuringAssignmentEvaluation of |AssignmentElisionElement| with argument _iteratorRecord_.
+
+ AssignmentElementList : AssignmentElementList `,` AssignmentElisionElement
+
+ 1. Perform ? IteratorDestructuringAssignmentEvaluation of |AssignmentElementList| with argument _iteratorRecord_.
+ 1. Return ? IteratorDestructuringAssignmentEvaluation of |AssignmentElisionElement| with argument _iteratorRecord_.
+
+ AssignmentElisionElement : AssignmentElement
+
+ 1. Return ? IteratorDestructuringAssignmentEvaluation of |AssignmentElement| with argument _iteratorRecord_.
+
+ AssignmentElisionElement : Elision AssignmentElement
+
+ 1. Perform ? IteratorDestructuringAssignmentEvaluation of |Elision| with argument _iteratorRecord_.
+ 1. Return ? IteratorDestructuringAssignmentEvaluation of |AssignmentElement| with argument _iteratorRecord_.
+
+ Elision : `,`
+
+ 1. If _iteratorRecord_.[[Done]] is *false*, then
+ 1. Let _next_ be Completion(IteratorStep(_iteratorRecord_)).
+ 1. If _next_ is an abrupt completion, set _iteratorRecord_.[[Done]] to *true*.
+ 1. ReturnIfAbrupt(_next_).
+ 1. If _next_ is *false*, set _iteratorRecord_.[[Done]] to *true*.
+ 1. Return ~unused~.
+
+ Elision : Elision `,`
+
+ 1. Perform ? IteratorDestructuringAssignmentEvaluation of |Elision| with argument _iteratorRecord_.
+ 1. If _iteratorRecord_.[[Done]] is *false*, then
+ 1. Let _next_ be Completion(IteratorStep(_iteratorRecord_)).
+ 1. If _next_ is an abrupt completion, set _iteratorRecord_.[[Done]] to *true*.
+ 1. ReturnIfAbrupt(_next_).
+ 1. If _next_ is *false*, set _iteratorRecord_.[[Done]] to *true*.
+ 1. Return ~unused~.
+
+ AssignmentElement : DestructuringAssignmentTarget Initializer?
+
+ 1. If |DestructuringAssignmentTarget| is neither an |ObjectLiteral| nor, an |ArrayLiteral|, nor `void`, then
+ 1. Let _lref_ be ? Evaluation of |DestructuringAssignmentTarget|.
+ 1. Let _value_ be *undefined*.
+ 1. If _iteratorRecord_.[[Done]] is *false*, then
+ 1. Let _next_ be ? IteratorStepValue(_iteratorRecord_).
+ 1. If _next_ is not ~done~, then
+ 1. Set _value_ to _next_.
+ 1. If |Initializer| is present and _value_ is *undefined*, then
+ 1. If IsAnonymousFunctionDefinition(|Initializer|) is *true* and IsIdentifierRef of |DestructuringAssignmentTarget| is *true*, then
+ 1. Let _v_ be ? NamedEvaluation of |Initializer| with argument _lref_.[[ReferencedName]].
+ 1. Else,
+ 1. Let _defaultValue_ be ? Evaluation of |Initializer|.
+ 1. Let _v_ be ? GetValue(_defaultValue_).
+ 1. Else,
+ 1. Let _v_ be _value_.
+ 1. If |DestructuringAssignmentTarget| is either an |ObjectLiteral| or an |ArrayLiteral|, then
+ 1. Let _nestedAssignmentPattern_ be the |AssignmentPattern| that is covered by |DestructuringAssignmentTarget|.
+ 1. Return ? DestructuringAssignmentEvaluation of _nestedAssignmentPattern_ with argument _v_.
+ 1. If |DestructuringAssignmentTarget| is `void`, then
+ 1. Return ~unused~.
+ 1. Return ? PutValue(_lref_, _v_).
+
+
+
Left to right evaluation order is maintained by evaluating a |DestructuringAssignmentTarget| that is not a destructuring pattern prior to accessing the iterator or evaluating the |Initializer|.
+
+ AssignmentRestElement : `...` DestructuringAssignmentTarget
+
+ 1. If |DestructuringAssignmentTarget| is neither an |ObjectLiteral| nor, an |ArrayLiteral|, nor `void`, then
+ 1. Let _lref_ be ? Evaluation of |DestructuringAssignmentTarget|.
+ 1. Let _A_ be ! ArrayCreate(0).
+ 1. Let _n_ be 0.
+ 1. Repeat, while _iteratorRecord_.[[Done]] is *false*,
+ 1. Let _next_ be ? IteratorStepValue(_iteratorRecord_).
+ 1. If _next_ is not ~done~, then
+ 1. Perform ! CreateDataPropertyOrThrow(_A_, ! ToString(𝔽(_n_)), _next_).
+ 1. Set _n_ to _n_ + 1.
+ 1. If |DestructuringAssignmentTarget| is neither an |ObjectLiteral| nor an |ArrayLiteral|, then
+ 1. Return ? PutValue(_lref_, _A_).
+ 1. Let _nestedAssignmentPattern_ be the |AssignmentPattern| that is covered by |DestructuringAssignmentTarget|.
+ 1. Return ? DestructuringAssignmentEvaluation of _nestedAssignmentPattern_ with argument _A_.
+ 1. If |DestructuringAssignmentTarget| is either an |ObjectLiteral| or an |ArrayLiteral|, then
+ 1. Let _nestedAssignmentPattern_ be the |AssignmentPattern| that is covered by |DestructuringAssignmentTarget|.
+ 1. Return ? DestructuringAssignmentEvaluation of _nestedAssignmentPattern_ with argument _A_.
+ 1. If |DestructuringAssignmentTarget| is `void`, then
+ 1. Return ~unused~.
+ 1. Return ? PutValue(_lref_, _A_).
+
+
+
+
+
+ Runtime Semantics: KeyedDestructuringAssignmentEvaluation (
+ _value_: an ECMAScript language value,
+ _propertyName_: a property key,
+ ): either a normal completion containing ~unused~ or an abrupt completion
+
+
+
+ AssignmentElement : DestructuringAssignmentTarget Initializer?
+
+ 1. If |DestructuringAssignmentTarget| is neither an |ObjectLiteral| nor an |ArrayLiteral| nor `void`, then
+ 1. Let _lref_ be ? Evaluation of |DestructuringAssignmentTarget|.
+ 1. Let _v_ be ? GetV(_value_, _propertyName_).
+ 1. If |Initializer| is present and _v_ is *undefined*, then
+ 1. If IsAnonymousFunctionDefinition(|Initializer|) and IsIdentifierRef of |DestructuringAssignmentTarget| are both *true*, then
+ 1. Let _rhsValue_ be ? NamedEvaluation of |Initializer| with argument _lref_.[[ReferencedName]].
+ 1. Else,
+ 1. Let _defaultValue_ be ? Evaluation of |Initializer|.
+ 1. Let _rhsValue_ be ? GetValue(_defaultValue_).
+ 1. Else,
+ 1. Let _rhsValue_ be _v_.
+ 1. If |DestructuringAssignmentTarget| is either an |ObjectLiteral| or an |ArrayLiteral|, then
+ 1. Let _assignmentPattern_ be the |AssignmentPattern| that is covered by |DestructuringAssignmentTarget|.
+ 1. Return ? DestructuringAssignmentEvaluation of _assignmentPattern_ with argument _rhsValue_.
+ 1. If |DestructuringAssignmentTarget| is `void`, then
+ 1. Return ~unused~.
+ 1. Return ? PutValue(_lref_, _rhsValue_).
+
+
+
+
-
-
- IsAccepted (
- _proposal_: an ECMAScript language value
- ): a Boolean
-
-
-
description
-
Tells you if the proposal was accepted
-
-
- 1. If _proposal_ is not a String, or is not accepted, return *false*.
- 1. Return *true*.
-
+
+
+ Runtime Semantics: BindingEvaluation (
+ _hint_: one of ~normal~, ~sync-dispose~, or ~async-dispose~,
+ ): either a normal completion containing ~unused~ or an abrupt completion
+
+
+
+ BindingList : BindingList `,` LexicalBinding
+
+ 1. Perform ? BindingEvaluation of |BindingList| with argument _hint_.
+ 1. Return ? BindingEvaluation of |LexicalBinding| with argument _hint_.
+
+ LexicalBinding : BindingIdentifier
+
+ 1. Assert: _hint_ is ~normal~.
+ 1. Let _lhs_ be ! ResolveBinding(StringValue of |BindingIdentifier|).
+ 1. Perform ! InitializeReferencedBinding(_lhs_, *undefined*, ~normal~).
+ 1. Return ~unused~.
+
+
+
A static semantics rule ensures that this form of |LexicalBinding| never occurs in a `const`, `using`, or `await using` declaration.
+
+ LexicalBinding : BindingIdentifier Initializer
+
+ 1. Let _bindingId_ be StringValue of |BindingIdentifier|.
+ 1. Let _lhs_ be ! ResolveBinding(_bindingId_).
+ 1. If IsAnonymousFunctionDefinition(|Initializer|) is *true*, then
+ 1. Let _value_ be ? NamedEvaluation of |Initializer| with argument _bindingId_.
+ 1. Else,
+ 1. Let _rhs_ be ? Evaluation of |Initializer|.
+ 1. Let _value_ be ? GetValue(_rhs_).
+ 1. Perform ? InitializeReferencedBinding(_lhs_, _value_, _hint_).
+ 1. Return ~unused~.
+
+
+ LexicalBinding : `void` Initializer
+
+ 1. Assert: _hint_ is not ~normal~.
+ 1. Let _env_ be the running execution context's LexicalEnvironment.
+ 1. Assert: _env_ is an Environment Record.
+ 1. Let _rhs_ be ? Evaluation of |Initializer|.
+ 1. Let _value_ be ? GetValue(_rhs_).
+ 1. Perform ? AddDisposableResource(_env_.[[DisposeCapability]], _value_, _hint_).
+ 1. Return ~unused~.
+
+
+ LexicalBinding : BindingPattern Initializer
+
+ 1. Assert: _hint_ is ~normal~.
+ 1. Let _rhs_ be ? Evaluation of |Initializer|.
+ 1. Let _value_ be ? GetValue(_rhs_).
+ 1. Let _env_ be the running execution context's LexicalEnvironment.
+ 1. Return ? BindingInitialization of |BindingPattern| with arguments _value_ and _env_.
+
+
+
+
+
+