Various ECMAScript language elements cause the creation of ECMAScript
Multiple occurrences of the same
The syntax-directed operation ContainsExpression takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation IsSimpleParameterList takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation HasInitializer takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation ExpectedArgumentCount takes no arguments. It is defined piecewise over the following productions:
The ExpectedArgumentCount of a
The
The syntax-directed operation FunctionBodyContainsUseStrict takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation EvaluateFunctionBody takes arguments functionObject and argumentsList (a
The syntax-directed operation InstantiateOrdinaryFunctionObject takes arguments scope and privateScope. It is defined piecewise over the following productions:
An anonymous export default
declaration, and its function code is therefore always
The syntax-directed operation InstantiateOrdinaryFunctionExpression takes optional argument name. It is defined piecewise over the following productions:
The
An alternative semantics is provided in
A
When processing an instance of the production
the interpretation of
The syntax-directed operation ConciseBodyContainsUseStrict takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation EvaluateConciseBody takes arguments functionObject and argumentsList (a
The syntax-directed operation InstantiateArrowFunctionExpression takes optional argument name. It is defined piecewise over the following productions:
An arguments
, super
, this
, or new.target
. Any reference to arguments
, super
, this
, or new.target
within an super
, the super
is always contained within a non-super
is accessible via the scope that is captured by the
The syntax-directed operation HasDirectSuper takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation SpecialMethod takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation DefineMethod takes argument object and optional argument functionPrototype. It is defined piecewise over the following productions:
The syntax-directed operation MethodDefinitionEvaluation takes arguments object and enumerable. It is defined piecewise over the following productions:
The syntactic context immediately following yield
requires use of the
The syntax-directed operation EvaluateGeneratorBody takes arguments functionObject and argumentsList (a
The syntax-directed operation InstantiateGeneratorFunctionObject takes arguments scope and privateScope. It is defined piecewise over the following productions:
An anonymous export default
declaration, and its function code is therefore always
The syntax-directed operation InstantiateGeneratorFunctionExpression takes optional argument name. It is defined piecewise over the following productions:
The
throw
method are propagated. throw
method are processed similarly to an inner next
.throw
method, this throw is going to terminate the yield*
loop. But first we need to give iterator a chance to clean up.yield*
protocol violation: iterator does not have a throw
method.The syntax-directed operation EvaluateAsyncGeneratorBody takes arguments functionObject and argumentsList (a
The syntax-directed operation InstantiateAsyncGeneratorFunctionObject takes arguments scope and privateScope. It is defined piecewise over the following productions:
An anonymous export default
declaration.
The
A class definition is always
It is a Syntax Error if
await
is The syntax-directed operation ClassElementKind takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation ConstructorMethod takes no arguments. It is defined piecewise over the following productions:
Early Error rules ensure that there is only one method definition named
The syntax-directed operation IsStatic takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation NonConstructorElements takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation PrototypePropertyNameList takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation AllPrivateIdentifiersValid takes argument names.
Every grammar production alternative in this specification which is not listed below implicitly has the following default definition of AllPrivateIdentifiersValid:
The syntax-directed operation PrivateBoundIdentifiers takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation ContainsArguments takes no arguments.
Every grammar production alternative in this specification which is not listed below implicitly has the following default definition of ContainsArguments:
The syntax-directed operation ClassFieldDefinitionEvaluation takes argument homeObject. It is defined piecewise over the following productions:
The syntax-directed operation ClassStaticBlockDefinitionEvaluation takes argument homeObject. It is defined piecewise over the following productions:
The syntax-directed operation EvaluateClassStaticBlockBody takes argument functionObject. It is defined piecewise over the following productions:
The syntax-directed operation ClassElementEvaluation takes argument object. It is defined piecewise over the following productions:
The syntax-directed operation ClassDefinitionEvaluation takes arguments classBinding and className.
For ease of specification, private methods and accessors are included alongside private fields in the [[PrivateElements]] slot of class instances. However, any given object has either all or none of the private methods and accessors defined by a given class. This feature has been designed so that implementations may choose to implement private methods and accessors using a strategy which does not require tracking each method or accessor individually.
For example, an implementation could directly associate instance private methods with their corresponding this
value. Looking up an instance private method on an object then consists of checking that the class
This differs from private fields: because field initializers can throw during class instantiation, an individual object may have some proper subset of the private fields of a given class, and so private fields must in general be tracked individually.
It is defined piecewise over the following productions:
constructor(...args) { super(...args); }
. The most notable distinction is that while the aforementioned ECMAScript source text observably calls the %Array.prototype%
, this function does not.constructor() {}
.The syntax-directed operation BindingClassDeclarationEvaluation takes no arguments. It is defined piecewise over the following productions:
await
is parsed as a
When await
may be parsed as an identifier when the [Await] parameter is absent. This includes the following contexts:
Unlike
The syntax-directed operation InstantiateAsyncFunctionObject takes arguments scope and privateScope. It is defined piecewise over the following productions:
The syntax-directed operation InstantiateAsyncFunctionExpression takes optional argument name. It is defined piecewise over the following productions:
The
The syntax-directed operation EvaluateAsyncFunctionBody takes arguments functionObject and argumentsList (a
When processing an instance of the production
the interpretation of
The syntax-directed operation AsyncConciseBodyContainsUseStrict takes no arguments. It is defined piecewise over the following productions:
The syntax-directed operation EvaluateAsyncConciseBody takes arguments functionObject and argumentsList (a
The abstract operation IsInTailPosition takes argument call (a
Tail Position calls are only defined in
The syntax-directed operation HasCallInTailPosition takes argument call.
call is a
A potential tail position call that is immediately followed by return
The abstract operation PrepareForTailCall takes no arguments. It performs the following steps when called:
A tail position call must either release any transient internal resources associated with the currently executing function
For example, a tail position call should only grow an implementation's activation record stack by the amount that the size of the target function's activation record exceeds the size of the calling function's activation record. If the target function's activation record is smaller, then the total size of the stack should decrease.