Movatterモバイル変換


[0]ホーム

URL:


Pins
Table of Contents
  1. Introduction
  2. 1 Scope
  3. +2 Conformance
    1. 2.1 Example Normative Optional Clause Heading
    2. 2.2 Example Legacy Clause Heading
    3. 2.3 Example Legacy Normative Optional Clause Heading
  4. 3 Normative References
  5. +4 Overview
    1. 4.1 Web Scripting
    2. 4.2 Hosts and Implementations
    3. +4.3 ECMAScript Overview
      1. 4.3.1 Objects
      2. 4.3.2 The Strict Variant of ECMAScript
    4. +4.4 Terms and Definitions
      1. 4.4.1 implementation-approximated
      2. 4.4.2 implementation-defined
      3. 4.4.3 host-defined
      4. 4.4.4 type
      5. 4.4.5 primitive value
      6. 4.4.6 object
      7. 4.4.7 constructor
      8. 4.4.8 prototype
      9. 4.4.9 ordinary object
      10. 4.4.10 exotic object
      11. 4.4.11 standard object
      12. 4.4.12 built-in object
      13. 4.4.13 undefined value
      14. 4.4.14 Undefined type
      15. 4.4.15 null value
      16. 4.4.16 Null type
      17. 4.4.17 Boolean value
      18. 4.4.18 Boolean type
      19. 4.4.19 Boolean object
      20. 4.4.20 String value
      21. 4.4.21 String type
      22. 4.4.22 String object
      23. 4.4.23 Number value
      24. 4.4.24 Number type
      25. 4.4.25 Number object
      26. 4.4.26 Infinity
      27. 4.4.27 NaN
      28. 4.4.28 BigInt value
      29. 4.4.29 BigInt type
      30. 4.4.30 BigInt object
      31. 4.4.31 Symbol value
      32. 4.4.32 Symbol type
      33. 4.4.33 Symbol object
      34. 4.4.34 function
      35. 4.4.35 built-in function
      36. 4.4.36 built-in constructor
      37. 4.4.37 property
      38. 4.4.38 method
      39. 4.4.39 built-in method
      40. 4.4.40 attribute
      41. 4.4.41 own property
      42. 4.4.42 inherited property
    5. 4.5 Organization of This Specification
  6. +5 Notational Conventions
    1. +5.1 Syntactic and Lexical Grammars
      1. 5.1.1 Context-Free Grammars
      2. 5.1.2 The Lexical and RegExp Grammars
      3. 5.1.3 The Numeric String Grammar
      4. 5.1.4 The Syntactic Grammar
      5. +5.1.5 Grammar Notation
        1. 5.1.5.1 Terminal Symbols
        2. 5.1.5.2 Nonterminal Symbols and Productions
        3. 5.1.5.3 Optional Symbols
        4. 5.1.5.4 Grammatical Parameters
        5. 5.1.5.5 one of
        6. 5.1.5.6 [empty]
        7. 5.1.5.7 Lookahead Restrictions
        8. 5.1.5.8 [noLineTerminator here]
        9. 5.1.5.9 but not
        10. 5.1.5.10 Descriptive Phrases
    2. +5.2 Algorithm Conventions
      1. 5.2.1 Abstract Operations
      2. 5.2.2 Syntax-Directed Operations
      3. +5.2.3 Runtime Semantics
        1. 5.2.3.1 Completion (completionRecord )
        2. 5.2.3.2 Throw an Exception
        3. 5.2.3.3 ReturnIfAbrupt
        4. 5.2.3.4 ReturnIfAbrupt Shorthands
        5. 5.2.3.5 Implicit Normal Completion
      4. 5.2.4 Static Semantics
      5. 5.2.5 Mathematical Operations
      6. 5.2.6 Value Notation
      7. 5.2.7 Identity
  7. +6 ECMAScript Data Types and Values
    1. +6.1 ECMAScript Language Types
      1. 6.1.1 The Undefined Type
      2. 6.1.2 The Null Type
      3. 6.1.3 The Boolean Type
      4. +6.1.4 The String Type
        1. 6.1.4.1 StringIndexOf (string,searchValue,fromIndex )
        2. 6.1.4.2 StringLastIndexOf (string,searchValue,fromIndex )
      5. +6.1.5 The Symbol Type
        1. 6.1.5.1 Well-Known Symbols
      6. +6.1.6 Numeric Types
        1. +6.1.6.1 The Number Type
          1. 6.1.6.1.1 Number::unaryMinus (x )
          2. 6.1.6.1.2 Number::bitwiseNOT (x )
          3. 6.1.6.1.3 Number::exponentiate (base,exponent )
          4. 6.1.6.1.4 Number::multiply (x,y )
          5. 6.1.6.1.5 Number::divide (x,y )
          6. 6.1.6.1.6 Number::remainder (n,d )
          7. 6.1.6.1.7 Number::add (x,y )
          8. 6.1.6.1.8 Number::subtract (x,y )
          9. 6.1.6.1.9 Number::leftShift (x,y )
          10. 6.1.6.1.10 Number::signedRightShift (x,y )
          11. 6.1.6.1.11 Number::unsignedRightShift (x,y )
          12. 6.1.6.1.12 Number::lessThan (x,y )
          13. 6.1.6.1.13 Number::equal (x,y )
          14. 6.1.6.1.14 Number::sameValue (x,y )
          15. 6.1.6.1.15 Number::sameValueZero (x,y )
          16. 6.1.6.1.16 NumberBitwiseOp (op,x,y )
          17. 6.1.6.1.17 Number::bitwiseAND (x,y )
          18. 6.1.6.1.18 Number::bitwiseXOR (x,y )
          19. 6.1.6.1.19 Number::bitwiseOR (x,y )
          20. 6.1.6.1.20 Number::toString (x,radix )
        2. +6.1.6.2 The BigInt Type
          1. 6.1.6.2.1 BigInt::unaryMinus (x )
          2. 6.1.6.2.2 BigInt::bitwiseNOT (x )
          3. 6.1.6.2.3 BigInt::exponentiate (base,exponent )
          4. 6.1.6.2.4 BigInt::multiply (x,y )
          5. 6.1.6.2.5 BigInt::divide (x,y )
          6. 6.1.6.2.6 BigInt::remainder (n,d )
          7. 6.1.6.2.7 BigInt::add (x,y )
          8. 6.1.6.2.8 BigInt::subtract (x,y )
          9. 6.1.6.2.9 BigInt::leftShift (x,y )
          10. 6.1.6.2.10 BigInt::signedRightShift (x,y )
          11. 6.1.6.2.11 BigInt::unsignedRightShift (x,y )
          12. 6.1.6.2.12 BigInt::lessThan (x,y )
          13. 6.1.6.2.13 BigInt::equal (x,y )
          14. 6.1.6.2.14 BinaryAnd (x,y )
          15. 6.1.6.2.15 BinaryOr (x,y )
          16. 6.1.6.2.16 BinaryXor (x,y )
          17. 6.1.6.2.17 BigIntBitwiseOp (op,x,y )
          18. 6.1.6.2.18 BigInt::bitwiseAND (x,y )
          19. 6.1.6.2.19 BigInt::bitwiseXOR (x,y )
          20. 6.1.6.2.20 BigInt::bitwiseOR (x,y )
          21. 6.1.6.2.21 BigInt::toString (x,radix )
      7. +6.1.7 The Object Type
        1. 6.1.7.1 Property Attributes
        2. 6.1.7.2 Object Internal Methods and Internal Slots
        3. 6.1.7.3 Invariants of the Essential Internal Methods
        4. 6.1.7.4 Well-Known Intrinsic Objects
    2. +6.2 ECMAScript Specification Types
      1. 6.2.1 The Enum Specification Type
      2. 6.2.2 The List and Record Specification Types
      3. 6.2.3 The Set and Relation Specification Types
      4. +6.2.4 The Completion Record Specification Type
        1. 6.2.4.1 NormalCompletion (value )
        2. 6.2.4.2 ThrowCompletion (value )
        3. 6.2.4.3 ReturnCompletion (value )
        4. 6.2.4.4 UpdateEmpty (completionRecord,value )
      5. +6.2.5 The Reference Record Specification Type
        1. 6.2.5.1 IsPropertyReference (V )
        2. 6.2.5.2 IsUnresolvableReference (V )
        3. 6.2.5.3 IsSuperReference (V )
        4. 6.2.5.4 IsPrivateReference (V )
        5. 6.2.5.5 GetValue (V )
        6. 6.2.5.6 PutValue (V,W )
        7. 6.2.5.7 GetThisValue (V )
        8. 6.2.5.8 InitializeReferencedBinding (V,W )
        9. 6.2.5.9 MakePrivateReference (baseValue,privateIdentifier )
      6. +6.2.6 The Property Descriptor Specification Type
        1. 6.2.6.1 IsAccessorDescriptor (Desc )
        2. 6.2.6.2 IsDataDescriptor (Desc )
        3. 6.2.6.3 IsGenericDescriptor (Desc )
        4. 6.2.6.4 FromPropertyDescriptor (Desc )
        5. 6.2.6.5 ToPropertyDescriptor (Obj )
        6. 6.2.6.6 CompletePropertyDescriptor (Desc )
      7. 6.2.7 The Environment Record Specification Type
      8. 6.2.8 The Abstract Closure Specification Type
      9. +6.2.9 Data Blocks
        1. 6.2.9.1 CreateByteDataBlock (size )
        2. 6.2.9.2 CreateSharedByteDataBlock (size )
        3. 6.2.9.3 CopyDataBlockBytes (toBlock,toIndex,fromBlock,fromIndex,count )
      10. 6.2.10 The PrivateElement Specification Type
      11. 6.2.11 The ClassFieldDefinition Record Specification Type
      12. 6.2.12 Private Names
      13. 6.2.13 The ClassStaticBlockDefinition Record Specification Type
  8. +7 Abstract Operations
    1. +7.1 Type Conversion
      1. +7.1.1 ToPrimitive (input [ ,preferredType ] )
        1. 7.1.1.1 OrdinaryToPrimitive (O,hint )
      2. 7.1.2 ToBoolean (argument )
      3. 7.1.3 ToNumeric (value )
      4. +7.1.4 ToNumber (argument )
        1. +7.1.4.1 ToNumber Applied to the String Type
          1. 7.1.4.1.1 StringToNumber (str )
          2. 7.1.4.1.2 RS: StringNumericValue
          3. 7.1.4.1.3 RoundMVResult (n )
      5. 7.1.5 ToIntegerOrInfinity (argument )
      6. 7.1.6 ToInt32 (argument )
      7. 7.1.7 ToUint32 (argument )
      8. 7.1.8 ToInt16 (argument )
      9. 7.1.9 ToUint16 (argument )
      10. 7.1.10 ToInt8 (argument )
      11. 7.1.11 ToUint8 (argument )
      12. 7.1.12 ToUint8Clamp (argument )
      13. 7.1.13 ToBigInt (argument )
      14. +7.1.14 StringToBigInt (str )
        1. 7.1.14.1 StringIntegerLiteral Grammar
        2. 7.1.14.2 RS: MV
      15. 7.1.15 ToBigInt64 (argument )
      16. 7.1.16 ToBigUint64 (argument )
      17. 7.1.17 ToString (argument )
      18. 7.1.18 ToObject (argument )
      19. 7.1.19 ToPropertyKey (argument )
      20. 7.1.20 ToLength (argument )
      21. 7.1.21 CanonicalNumericIndexString (argument )
      22. 7.1.22 ToIndex (value )
    2. +7.2 Testing and Comparison Operations
      1. 7.2.1 RequireObjectCoercible (argument )
      2. 7.2.2 IsArray (argument )
      3. 7.2.3 IsCallable (argument )
      4. 7.2.4 IsConstructor (argument )
      5. 7.2.5 IsExtensible (O )
      6. 7.2.6 IsRegExp (argument )
      7. 7.2.7 SS: IsStringWellFormedUnicode (string )
      8. 7.2.8 SameType (x,y )
      9. 7.2.9 SameValue (x,y )
      10. 7.2.10 SameValueZero (x,y )
      11. 7.2.11 SameValueNonNumber (x,y )
      12. 7.2.12 IsLessThan (x,y,LeftFirst )
      13. 7.2.13 IsLooselyEqual (x,y )
      14. 7.2.14 IsStrictlyEqual (x,y )
    3. +7.3 Operations on Objects
      1. 7.3.1 MakeBasicObject (internalSlotsList )
      2. 7.3.2 Get (O,P )
      3. 7.3.3 GetV (V,P )
      4. 7.3.4 Set (O,P,V,Throw )
      5. 7.3.5 CreateDataProperty (O,P,V )
      6. 7.3.6 CreateDataPropertyOrThrow (O,P,V )
      7. 7.3.7 CreateNonEnumerableDataPropertyOrThrow (O,P,V )
      8. 7.3.8 DefinePropertyOrThrow (O,P,desc )
      9. 7.3.9 DeletePropertyOrThrow (O,P )
      10. 7.3.10 GetMethod (V,P )
      11. 7.3.11 HasProperty (O,P )
      12. 7.3.12 HasOwnProperty (O,P )
      13. 7.3.13 Call (F,V [ ,argumentsList ] )
      14. 7.3.14 Construct (F [ ,argumentsList [ ,newTarget ] ] )
      15. 7.3.15 SetIntegrityLevel (O,level )
      16. 7.3.16 TestIntegrityLevel (O,level )
      17. 7.3.17 CreateArrayFromList (elements )
      18. 7.3.18 LengthOfArrayLike (obj )
      19. 7.3.19 CreateListFromArrayLike (obj [ ,validElementTypes ] )
      20. 7.3.20 Invoke (V,P [ ,argumentsList ] )
      21. 7.3.21 OrdinaryHasInstance (C,O )
      22. 7.3.22 SpeciesConstructor (O,defaultConstructor )
      23. 7.3.23 EnumerableOwnProperties (O,kind )
      24. 7.3.24 GetFunctionRealm (obj )
      25. 7.3.25 CopyDataProperties (target,source,excludedItems )
      26. 7.3.26 PrivateElementFind (O,P )
      27. 7.3.27 PrivateFieldAdd (O,P,value )
      28. 7.3.28 PrivateMethodOrAccessorAdd (O,method )
      29. 7.3.29 HostEnsureCanAddPrivateElement (O )
      30. 7.3.30 PrivateGet (O,P )
      31. 7.3.31 PrivateSet (O,P,value )
      32. 7.3.32 DefineField (receiver,fieldRecord )
      33. 7.3.33 InitializeInstanceElements (O,constructor )
      34. 7.3.34 AddValueToKeyedGroup (groups,key,value )
      35. 7.3.35 GroupBy (items,callback,keyCoercion )
      36. 7.3.36 GetOptionsObject (options )
      37. 7.3.37 SetterThatIgnoresPrototypeProperties (thisValue,home,p,v )
    4. +7.4 Operations on Iterator Objects
      1. 7.4.1 Iterator Records
      2. 7.4.2 GetIteratorDirect (obj )
      3. 7.4.3 GetIteratorFromMethod (obj,method )
      4. 7.4.4 GetIterator (obj,kind )
      5. 7.4.5 GetIteratorFlattenable (obj,primitiveHandling )
      6. 7.4.6 IteratorNext (iteratorRecord [ ,value ] )
      7. 7.4.7 IteratorComplete (iteratorResult )
      8. 7.4.8 IteratorValue (iteratorResult )
      9. 7.4.9 IteratorStep (iteratorRecord )
      10. 7.4.10 IteratorStepValue (iteratorRecord )
      11. 7.4.11 IteratorClose (iteratorRecord,completion )
      12. 7.4.12 IfAbruptCloseIterator (value,iteratorRecord )
      13. 7.4.13 AsyncIteratorClose (iteratorRecord,completion )
      14. 7.4.14 CreateIteratorResultObject (value,done )
      15. 7.4.15 CreateListIteratorRecord (list )
      16. 7.4.16 IteratorToList (iteratorRecord )
  9. +8 Syntax-Directed Operations
    1. 8.1 RS: Evaluation
    2. +8.2 Scope Analysis
      1. 8.2.1 SS: BoundNames
      2. 8.2.2 SS: DeclarationPart
      3. 8.2.3 SS: IsConstantDeclaration
      4. 8.2.4 SS: LexicallyDeclaredNames
      5. 8.2.5 SS: LexicallyScopedDeclarations
      6. 8.2.6 SS: VarDeclaredNames
      7. 8.2.7 SS: VarScopedDeclarations
      8. 8.2.8 SS: TopLevelLexicallyDeclaredNames
      9. 8.2.9 SS: TopLevelLexicallyScopedDeclarations
      10. 8.2.10 SS: TopLevelVarDeclaredNames
      11. 8.2.11 SS: TopLevelVarScopedDeclarations
    3. +8.3 Labels
      1. 8.3.1 SS: ContainsDuplicateLabels
      2. 8.3.2 SS: ContainsUndefinedBreakTarget
      3. 8.3.3 SS: ContainsUndefinedContinueTarget
    4. +8.4 Function Name Inference
      1. 8.4.1 SS: HasName
      2. 8.4.2 SS: IsFunctionDefinition
      3. 8.4.3 SS: IsAnonymousFunctionDefinition (expr )
      4. 8.4.4 SS: IsIdentifierRef
      5. 8.4.5 RS: NamedEvaluation
    5. +8.5 Contains
      1. 8.5.1 SS: Contains
      2. 8.5.2 SS: ComputedPropertyContains
    6. +8.6 Miscellaneous
      1. 8.6.1 RS: InstantiateFunctionObject
      2. +8.6.2 RS: BindingInitialization
        1. 8.6.2.1 InitializeBoundName (name,value,environment )
      3. 8.6.3 RS: IteratorBindingInitialization
      4. 8.6.4 SS: AssignmentTargetType
      5. 8.6.5 SS: PropName
  10. +9 Executable Code and Execution Contexts
    1. +9.1 Environment Records
      1. +9.1.1 The Environment Record Type Hierarchy
        1. +9.1.1.1 Declarative Environment Records
          1. 9.1.1.1.1 HasBinding (N )
          2. 9.1.1.1.2 CreateMutableBinding (N,D )
          3. 9.1.1.1.3 CreateImmutableBinding (N,S )
          4. 9.1.1.1.4 InitializeBinding (N,V )
          5. 9.1.1.1.5 SetMutableBinding (N,V,S )
          6. 9.1.1.1.6 GetBindingValue (N,S )
          7. 9.1.1.1.7 DeleteBinding (N )
          8. 9.1.1.1.8 HasThisBinding ( )
          9. 9.1.1.1.9 HasSuperBinding ( )
          10. 9.1.1.1.10 WithBaseObject ( )
        2. +9.1.1.2 Object Environment Records
          1. 9.1.1.2.1 HasBinding (N )
          2. 9.1.1.2.2 CreateMutableBinding (N,D )
          3. 9.1.1.2.3 CreateImmutableBinding (N,S )
          4. 9.1.1.2.4 InitializeBinding (N,V )
          5. 9.1.1.2.5 SetMutableBinding (N,V,S )
          6. 9.1.1.2.6 GetBindingValue (N,S )
          7. 9.1.1.2.7 DeleteBinding (N )
          8. 9.1.1.2.8 HasThisBinding ( )
          9. 9.1.1.2.9 HasSuperBinding ( )
          10. 9.1.1.2.10 WithBaseObject ( )
        3. +9.1.1.3 Function Environment Records
          1. 9.1.1.3.1 BindThisValue (envRec,V )
          2. 9.1.1.3.2 HasThisBinding ( )
          3. 9.1.1.3.3 HasSuperBinding ( )
          4. 9.1.1.3.4 GetThisBinding ( )
          5. 9.1.1.3.5 GetSuperBase (envRec )
        4. +9.1.1.4 Global Environment Records
          1. 9.1.1.4.1 HasBinding (N )
          2. 9.1.1.4.2 CreateMutableBinding (N,D )
          3. 9.1.1.4.3 CreateImmutableBinding (N,S )
          4. 9.1.1.4.4 InitializeBinding (N,V )
          5. 9.1.1.4.5 SetMutableBinding (N,V,S )
          6. 9.1.1.4.6 GetBindingValue (N,S )
          7. 9.1.1.4.7 DeleteBinding (N )
          8. 9.1.1.4.8 HasThisBinding ( )
          9. 9.1.1.4.9 HasSuperBinding ( )
          10. 9.1.1.4.10 WithBaseObject ( )
          11. 9.1.1.4.11 GetThisBinding ( )
          12. 9.1.1.4.12 HasLexicalDeclaration (envRec,N )
          13. 9.1.1.4.13 HasRestrictedGlobalProperty (envRec,N )
          14. 9.1.1.4.14 CanDeclareGlobalVar (envRec,N )
          15. 9.1.1.4.15 CanDeclareGlobalFunction (envRec,N )
          16. 9.1.1.4.16 CreateGlobalVarBinding (envRec,N,D )
          17. 9.1.1.4.17 CreateGlobalFunctionBinding (envRec,N,V,D )
        5. +9.1.1.5 Module Environment Records
          1. 9.1.1.5.1 GetBindingValue (N,S )
          2. 9.1.1.5.2 DeleteBinding (N )
          3. 9.1.1.5.3 HasThisBinding ( )
          4. 9.1.1.5.4 GetThisBinding ( )
          5. 9.1.1.5.5 CreateImportBinding (envRec,N,M,N2 )
      2. +9.1.2 Environment Record Operations
        1. 9.1.2.1 GetIdentifierReference (env,name,strict )
        2. 9.1.2.2 NewDeclarativeEnvironment (E )
        3. 9.1.2.3 NewObjectEnvironment (O,W,E )
        4. 9.1.2.4 NewFunctionEnvironment (F,newTarget )
        5. 9.1.2.5 NewGlobalEnvironment (G,thisValue )
        6. 9.1.2.6 NewModuleEnvironment (E )
    2. +9.2 PrivateEnvironment Records
      1. +9.2.1 PrivateEnvironment Record Operations
        1. 9.2.1.1 NewPrivateEnvironment (outerPrivateEnv )
        2. 9.2.1.2 ResolvePrivateIdentifier (privateEnv,identifier )
    3. +9.3 Realms
      1. 9.3.1 InitializeHostDefinedRealm ( )
      2. 9.3.2 CreateIntrinsics (realmRec )
      3. 9.3.3 SetDefaultGlobalBindings (realmRec )
    4. +9.4 Execution Contexts
      1. 9.4.1 GetActiveScriptOrModule ( )
      2. 9.4.2 ResolveBinding (name [ ,env ] )
      3. 9.4.3 GetThisEnvironment ( )
      4. 9.4.4 ResolveThisBinding ( )
      5. 9.4.5 GetNewTarget ( )
      6. 9.4.6 GetGlobalObject ( )
    5. +9.5 Jobs and Host Operations to Enqueue Jobs
      1. 9.5.1 JobCallback Records
      2. 9.5.2 HostMakeJobCallback (callback )
      3. 9.5.3 HostCallJobCallback (jobCallback,V,argumentsList )
      4. 9.5.4 HostEnqueueGenericJob (job,realm )
      5. 9.5.5 HostEnqueuePromiseJob (job,realm )
      6. 9.5.6 HostEnqueueTimeoutJob (timeoutJob,realm,milliseconds )
    6. +9.6 Agents
      1. 9.6.1 AgentSignifier ( )
      2. 9.6.2 AgentCanSuspend ( )
      3. 9.6.3 IncrementModuleAsyncEvaluationCount ( )
    7. 9.7 Agent Clusters
    8. 9.8 Forward Progress
    9. +9.9 Processing Model of WeakRef and FinalizationRegistry Targets
      1. 9.9.1 Objectives
      2. 9.9.2 Liveness
      3. 9.9.3 Execution
      4. +9.9.4 Host Hooks
        1. 9.9.4.1 HostEnqueueFinalizationRegistryCleanupJob (finalizationRegistry )
    10. 9.10 ClearKeptObjects ( )
    11. 9.11 AddToKeptObjects (value )
    12. 9.12 CleanupFinalizationRegistry (finalizationRegistry )
    13. 9.13 CanBeHeldWeakly (v )
  11. +10 Ordinary and Exotic Objects Behaviours
    1. +10.1 Ordinary Object Internal Methods and Internal Slots
      1. +10.1.1[[GetPrototypeOf]] ( )
        1. 10.1.1.1 OrdinaryGetPrototypeOf (O )
      2. +10.1.2[[SetPrototypeOf]] (V )
        1. 10.1.2.1 OrdinarySetPrototypeOf (O,V )
      3. +10.1.3[[IsExtensible]] ( )
        1. 10.1.3.1 OrdinaryIsExtensible (O )
      4. +10.1.4[[PreventExtensions]] ( )
        1. 10.1.4.1 OrdinaryPreventExtensions (O )
      5. +10.1.5[[GetOwnProperty]] (P )
        1. 10.1.5.1 OrdinaryGetOwnProperty (O,P )
      6. +10.1.6[[DefineOwnProperty]] (P,Desc )
        1. 10.1.6.1 OrdinaryDefineOwnProperty (O,P,Desc )
        2. 10.1.6.2 IsCompatiblePropertyDescriptor (Extensible,Desc,Current )
        3. 10.1.6.3 ValidateAndApplyPropertyDescriptor (O,P,extensible,Desc,current )
      7. +10.1.7[[HasProperty]] (P )
        1. 10.1.7.1 OrdinaryHasProperty (O,P )
      8. +10.1.8[[Get]] (P,Receiver )
        1. 10.1.8.1 OrdinaryGet (O,P,Receiver )
      9. +10.1.9[[Set]] (P,V,Receiver )
        1. 10.1.9.1 OrdinarySet (O,P,V,Receiver )
        2. 10.1.9.2 OrdinarySetWithOwnDescriptor (O,P,V,Receiver,ownDesc )
      10. +10.1.10[[Delete]] (P )
        1. 10.1.10.1 OrdinaryDelete (O,P )
      11. +10.1.11[[OwnPropertyKeys]] ( )
        1. 10.1.11.1 OrdinaryOwnPropertyKeys (O )
      12. 10.1.12 OrdinaryObjectCreate (proto [ ,additionalInternalSlotsList ] )
      13. 10.1.13 OrdinaryCreateFromConstructor (constructor,intrinsicDefaultProto [ ,internalSlotsList ] )
      14. 10.1.14 GetPrototypeFromConstructor (constructor,intrinsicDefaultProto )
      15. 10.1.15 RequireInternalSlot (O,internalSlot )
    2. +10.2 ECMAScript Function Objects
      1. +10.2.1[[Call]] (thisArgument,argumentsList )
        1. 10.2.1.1 PrepareForOrdinaryCall (F,newTarget )
        2. 10.2.1.2 OrdinaryCallBindThis (F,calleeContext,thisArgument )
        3. 10.2.1.3 RS: EvaluateBody
        4. 10.2.1.4 OrdinaryCallEvaluateBody (F,argumentsList )
      2. 10.2.2[[Construct]] (argumentsList,newTarget )
      3. 10.2.3 OrdinaryFunctionCreate (functionPrototype,sourceText,ParameterList,Body,thisMode,env,privateEnv )
      4. +10.2.4 AddRestrictedFunctionProperties (F,realm )
        1. 10.2.4.1 %ThrowTypeError% ( )
      5. 10.2.5 MakeConstructor (F [ ,writablePrototype [ ,prototype ] ] )
      6. 10.2.6 MakeClassConstructor (F )
      7. 10.2.7 MakeMethod (F,homeObject )
      8. 10.2.8 DefineMethodProperty (homeObject,key,closure,enumerable )
      9. 10.2.9 SetFunctionName (F,name [ ,prefix ] )
      10. 10.2.10 SetFunctionLength (F,length )
      11. 10.2.11 FunctionDeclarationInstantiation (func,argumentsList )
    3. +10.3 Built-in Function Objects
      1. 10.3.1[[Call]] (thisArgument,argumentsList )
      2. 10.3.2[[Construct]] (argumentsList,newTarget )
      3. 10.3.3 BuiltinCallOrConstruct (F,thisArgument,argumentsList,newTarget )
      4. 10.3.4 CreateBuiltinFunction (behaviour,length,name,additionalInternalSlotsList [ ,realm [ ,prototype [ ,prefix ] ] ] )
    4. +10.4 Built-in Exotic Object Internal Methods and Slots
      1. +10.4.1 Bound Function Exotic Objects
        1. 10.4.1.1[[Call]] (thisArgument,argumentsList )
        2. 10.4.1.2[[Construct]] (argumentsList,newTarget )
        3. 10.4.1.3 BoundFunctionCreate (targetFunction,boundThis,boundArgs )
      2. +10.4.2 Array Exotic Objects
        1. 10.4.2.1[[DefineOwnProperty]] (P,Desc )
        2. 10.4.2.2 ArrayCreate (length [ ,proto ] )
        3. 10.4.2.3 ArraySpeciesCreate (originalArray,length )
        4. 10.4.2.4 ArraySetLength (A,Desc )
      3. +10.4.3 String Exotic Objects
        1. 10.4.3.1[[GetOwnProperty]] (P )
        2. 10.4.3.2[[DefineOwnProperty]] (P,Desc )
        3. 10.4.3.3[[OwnPropertyKeys]] ( )
        4. 10.4.3.4 StringCreate (value,prototype )
        5. 10.4.3.5 StringGetOwnProperty (S,P )
      4. +10.4.4 Arguments Exotic Objects
        1. 10.4.4.1[[GetOwnProperty]] (P )
        2. 10.4.4.2[[DefineOwnProperty]] (P,Desc )
        3. 10.4.4.3[[Get]] (P,Receiver )
        4. 10.4.4.4[[Set]] (P,V,Receiver )
        5. 10.4.4.5[[Delete]] (P )
        6. 10.4.4.6 CreateUnmappedArgumentsObject (argumentsList )
        7. +10.4.4.7 CreateMappedArgumentsObject (func,formals,argumentsList,env )
          1. 10.4.4.7.1 MakeArgGetter (name,env )
          2. 10.4.4.7.2 MakeArgSetter (name,env )
      5. +10.4.5 TypedArray Exotic Objects
        1. 10.4.5.1[[PreventExtensions]] ( )
        2. 10.4.5.2[[GetOwnProperty]] (P )
        3. 10.4.5.3[[HasProperty]] (P )
        4. 10.4.5.4[[DefineOwnProperty]] (P,Desc )
        5. 10.4.5.5[[Get]] (P,Receiver )
        6. 10.4.5.6[[Set]] (P,V,Receiver )
        7. 10.4.5.7[[Delete]] (P )
        8. 10.4.5.8[[OwnPropertyKeys]] ( )
        9. 10.4.5.9 TypedArray With Buffer Witness Records
        10. 10.4.5.10 MakeTypedArrayWithBufferWitnessRecord (obj,order )
        11. 10.4.5.11 TypedArrayCreate (prototype )
        12. 10.4.5.12 TypedArrayByteLength (taRecord )
        13. 10.4.5.13 TypedArrayLength (taRecord )
        14. 10.4.5.14 IsTypedArrayOutOfBounds (taRecord )
        15. 10.4.5.15 IsTypedArrayFixedLength (O )
        16. 10.4.5.16 IsValidIntegerIndex (O,index )
        17. 10.4.5.17 TypedArrayGetElement (O,index )
        18. 10.4.5.18 TypedArraySetElement (O,index,value )
        19. 10.4.5.19 IsArrayBufferViewOutOfBounds (O )
      6. +10.4.6 Module Namespace Exotic Objects
        1. 10.4.6.1[[GetPrototypeOf]] ( )
        2. 10.4.6.2[[SetPrototypeOf]] (V )
        3. 10.4.6.3[[IsExtensible]] ( )
        4. 10.4.6.4[[PreventExtensions]] ( )
        5. 10.4.6.5[[GetOwnProperty]] (P )
        6. 10.4.6.6[[DefineOwnProperty]] (P,Desc )
        7. 10.4.6.7[[HasProperty]] (P )
        8. 10.4.6.8[[Get]] (P,Receiver )
        9. 10.4.6.9[[Set]] (P,V,Receiver )
        10. 10.4.6.10[[Delete]] (P )
        11. 10.4.6.11[[OwnPropertyKeys]] ( )
        12. 10.4.6.12 ModuleNamespaceCreate (module,exports )
      7. +10.4.7 Immutable Prototype Exotic Objects
        1. 10.4.7.1[[SetPrototypeOf]] (V )
        2. 10.4.7.2 SetImmutablePrototype (O,V )
    5. +10.5 Proxy Object Internal Methods and Internal Slots
      1. 10.5.1[[GetPrototypeOf]] ( )
      2. 10.5.2[[SetPrototypeOf]] (V )
      3. 10.5.3[[IsExtensible]] ( )
      4. 10.5.4[[PreventExtensions]] ( )
      5. 10.5.5[[GetOwnProperty]] (P )
      6. 10.5.6[[DefineOwnProperty]] (P,Desc )
      7. 10.5.7[[HasProperty]] (P )
      8. 10.5.8[[Get]] (P,Receiver )
      9. 10.5.9[[Set]] (P,V,Receiver )
      10. 10.5.10[[Delete]] (P )
      11. 10.5.11[[OwnPropertyKeys]] ( )
      12. 10.5.12[[Call]] (thisArgument,argumentsList )
      13. 10.5.13[[Construct]] (argumentsList,newTarget )
      14. 10.5.14 ValidateNonRevokedProxy (proxy )
      15. 10.5.15 ProxyCreate (target,handler )
  12. +11 ECMAScript Language: Source Text
    1. +11.1 Source Text
      1. 11.1.1 SS: UTF16EncodeCodePoint (cp )
      2. 11.1.2 SS: CodePointsToString (text )
      3. 11.1.3 SS: UTF16SurrogatePairToCodePoint (lead,trail )
      4. 11.1.4 SS: CodePointAt (string,position )
      5. 11.1.5 SS: StringToCodePoints (string )
      6. 11.1.6 SS: ParseText (sourceText,goalSymbol )
    2. +11.2 Types of Source Code
      1. 11.2.1 Directive Prologues and the Use Strict Directive
      2. +11.2.2 Strict Mode Code
        1. 11.2.2.1 SS: IsStrict (node )
      3. 11.2.3 Non-ECMAScript Functions
  13. +12 ECMAScript Language: Lexical Grammar
    1. 12.1 Unicode Format-Control Characters
    2. 12.2 White Space
    3. 12.3 Line Terminators
    4. 12.4 Comments
    5. 12.5 Hashbang Comments
    6. 12.6 Tokens
    7. +12.7 Names and Keywords
      1. +12.7.1 Identifier Names
        1. 12.7.1.1 SS: Early Errors
        2. 12.7.1.2 SS: IdentifierCodePoints
        3. 12.7.1.3 SS: IdentifierCodePoint
      2. 12.7.2 Keywords and Reserved Words
    8. 12.8 Punctuators
    9. +12.9 Literals
      1. 12.9.1 Null Literals
      2. 12.9.2 Boolean Literals
      3. +12.9.3 Numeric Literals
        1. 12.9.3.1 SS: Early Errors
        2. 12.9.3.2 SS: MV
        3. 12.9.3.3 SS: NumericValue
      4. +12.9.4 String Literals
        1. 12.9.4.1 SS: Early Errors
        2. 12.9.4.2 SS: SV
        3. 12.9.4.3 SS: MV
      5. +12.9.5 Regular Expression Literals
        1. 12.9.5.1 SS: BodyText
        2. 12.9.5.2 SS: FlagText
      6. +12.9.6 Template Literal Lexical Components
        1. 12.9.6.1 SS: TV
        2. 12.9.6.2 SS: TRV
    10. +12.10 Automatic Semicolon Insertion
      1. 12.10.1 Rules of Automatic Semicolon Insertion
      2. 12.10.2 Examples of Automatic Semicolon Insertion
      3. +12.10.3 Interesting Cases of Automatic Semicolon Insertion
        1. 12.10.3.1 Interesting Cases of Automatic Semicolon Insertion in Statement Lists
        2. +12.10.3.2 Cases of Automatic Semicolon Insertion and “[noLineTerminator here]”
          1. 12.10.3.2.1 List of Grammar Productions with Optional Operands and “[noLineTerminator here]”
  14. +13 ECMAScript Language: Expressions
    1. +13.1 Identifiers
      1. 13.1.1 SS: Early Errors
      2. 13.1.2 SS: StringValue
      3. 13.1.3 RS: Evaluation
    2. +13.2 Primary Expression
      1. +13.2.1 Thethis Keyword
        1. 13.2.1.1 RS: Evaluation
      2. 13.2.2 Identifier Reference
      3. +13.2.3 Literals
        1. 13.2.3.1 RS: Evaluation
      4. +13.2.4 Array Initializer
        1. 13.2.4.1 RS: ArrayAccumulation
        2. 13.2.4.2 RS: Evaluation
      5. +13.2.5 Object Initializer
        1. 13.2.5.1 SS: Early Errors
        2. 13.2.5.2 SS: IsComputedPropertyKey
        3. 13.2.5.3 SS: PropertyNameList
        4. 13.2.5.4 RS: Evaluation
        5. 13.2.5.5 RS: PropertyDefinitionEvaluation
      6. 13.2.6 Function Defining Expressions
      7. +13.2.7 Regular Expression Literals
        1. 13.2.7.1 SS: Early Errors
        2. 13.2.7.2 SS: IsValidRegularExpressionLiteral (literal )
        3. 13.2.7.3 RS: Evaluation
      8. +13.2.8 Template Literals
        1. 13.2.8.1 SS: Early Errors
        2. 13.2.8.2 SS: TemplateStrings
        3. 13.2.8.3 SS: TemplateString (templateToken,raw )
        4. 13.2.8.4 GetTemplateObject (templateLiteral )
        5. 13.2.8.5 RS: SubstitutionEvaluation
        6. 13.2.8.6 RS: Evaluation
      9. +13.2.9 The Grouping Operator
        1. 13.2.9.1 SS: Early Errors
        2. 13.2.9.2 RS: Evaluation
    3. +13.3 Left-Hand-Side Expressions
      1. +13.3.1 Static Semantics
        1. 13.3.1.1 SS: Early Errors
      2. +13.3.2 Property Accessors
        1. 13.3.2.1 RS: Evaluation
      3. 13.3.3 EvaluatePropertyAccessWithExpressionKey (baseValue,expression,strict )
      4. 13.3.4 EvaluatePropertyAccessWithIdentifierKey (baseValue,identifierName,strict )
      5. +13.3.5 Thenew Operator
        1. +13.3.5.1 RS: Evaluation
          1. 13.3.5.1.1 EvaluateNew (constructExpr,arguments )
      6. +13.3.6 Function Calls
        1. 13.3.6.1 RS: Evaluation
        2. 13.3.6.2 EvaluateCall (func,ref,arguments,tailPosition )
      7. +13.3.7 Thesuper Keyword
        1. 13.3.7.1 RS: Evaluation
        2. 13.3.7.2 GetSuperConstructor ( )
        3. 13.3.7.3 MakeSuperPropertyReference (actualThis,propertyKey,strict )
      8. +13.3.8 Argument Lists
        1. 13.3.8.1 RS: ArgumentListEvaluation
      9. +13.3.9 Optional Chains
        1. 13.3.9.1 RS: Evaluation
        2. 13.3.9.2 RS: ChainEvaluation
      10. +13.3.10 Import Calls
        1. 13.3.10.1 RS: Evaluation
        2. 13.3.10.2 EvaluateImportCall (specifierExpression [ ,optionsExpression ] )
        3. 13.3.10.3 ContinueDynamicImport (promiseCapability,moduleCompletion )
      11. +13.3.11 Tagged Templates
        1. 13.3.11.1 RS: Evaluation
      12. +13.3.12 Meta Properties
        1. +13.3.12.1 RS: Evaluation
          1. 13.3.12.1.1 HostGetImportMetaProperties (moduleRecord )
          2. 13.3.12.1.2 HostFinalizeImportMeta (importMeta,moduleRecord )
    4. +13.4 Update Expressions
      1. 13.4.1 SS: Early Errors
      2. +13.4.2 Postfix Increment Operator
        1. 13.4.2.1 RS: Evaluation
      3. +13.4.3 Postfix Decrement Operator
        1. 13.4.3.1 RS: Evaluation
      4. +13.4.4 Prefix Increment Operator
        1. 13.4.4.1 RS: Evaluation
      5. +13.4.5 Prefix Decrement Operator
        1. 13.4.5.1 RS: Evaluation
    5. +13.5 Unary Operators
      1. +13.5.1 Thedelete Operator
        1. 13.5.1.1 SS: Early Errors
        2. 13.5.1.2 RS: Evaluation
      2. +13.5.2 Thevoid Operator
        1. 13.5.2.1 RS: Evaluation
      3. +13.5.3 Thetypeof Operator
        1. 13.5.3.1 RS: Evaluation
      4. +13.5.4 Unary+ Operator
        1. 13.5.4.1 RS: Evaluation
      5. +13.5.5 Unary- Operator
        1. 13.5.5.1 RS: Evaluation
      6. +13.5.6 Bitwise NOT Operator (~ )
        1. 13.5.6.1 RS: Evaluation
      7. +13.5.7 Logical NOT Operator (! )
        1. 13.5.7.1 RS: Evaluation
    6. +13.6 Exponentiation Operator
      1. 13.6.1 RS: Evaluation
    7. +13.7 Multiplicative Operators
      1. 13.7.1 RS: Evaluation
    8. +13.8 Additive Operators
      1. +13.8.1 The Addition Operator (+ )
        1. 13.8.1.1 RS: Evaluation
      2. +13.8.2 The Subtraction Operator (- )
        1. 13.8.2.1 RS: Evaluation
    9. +13.9 Bitwise Shift Operators
      1. +13.9.1 The Left Shift Operator (<< )
        1. 13.9.1.1 RS: Evaluation
      2. +13.9.2 The Signed Right Shift Operator (>> )
        1. 13.9.2.1 RS: Evaluation
      3. +13.9.3 The Unsigned Right Shift Operator (>>> )
        1. 13.9.3.1 RS: Evaluation
    10. +13.10 Relational Operators
      1. 13.10.1 RS: Evaluation
      2. 13.10.2 InstanceofOperator (V,target )
    11. +13.11 Equality Operators
      1. 13.11.1 RS: Evaluation
    12. +13.12 Binary Bitwise Operators
      1. 13.12.1 RS: Evaluation
    13. +13.13 Binary Logical Operators
      1. 13.13.1 RS: Evaluation
    14. +13.14 Conditional Operator (? : )
      1. 13.14.1 RS: Evaluation
    15. +13.15 Assignment Operators
      1. 13.15.1 SS: Early Errors
      2. 13.15.2 RS: Evaluation
      3. 13.15.3 ApplyStringOrNumericBinaryOperator (lVal,opText,rVal )
      4. 13.15.4 EvaluateStringOrNumericBinaryExpression (leftOperand,opText,rightOperand )
      5. +13.15.5 Destructuring Assignment
        1. 13.15.5.1 SS: Early Errors
        2. 13.15.5.2 RS: DestructuringAssignmentEvaluation
        3. 13.15.5.3 RS: PropertyDestructuringAssignmentEvaluation
        4. 13.15.5.4 RS: RestDestructuringAssignmentEvaluation
        5. 13.15.5.5 RS: IteratorDestructuringAssignmentEvaluation
        6. 13.15.5.6 RS: KeyedDestructuringAssignmentEvaluation
    16. +13.16 Comma Operator (, )
      1. 13.16.1 RS: Evaluation
  15. +14 ECMAScript Language: Statements and Declarations
    1. +14.1 Statement Semantics
      1. 14.1.1 RS: Evaluation
    2. +14.2 Block
      1. 14.2.1 SS: Early Errors
      2. 14.2.2 RS: Evaluation
      3. 14.2.3 BlockDeclarationInstantiation (code,env )
    3. +14.3 Declarations and the Variable Statement
      1. +14.3.1 Let and Const Declarations
        1. 14.3.1.1 SS: Early Errors
        2. 14.3.1.2 RS: Evaluation
      2. +14.3.2 Variable Statement
        1. 14.3.2.1 RS: Evaluation
      3. +14.3.3 Destructuring Binding Patterns
        1. 14.3.3.1 RS: PropertyBindingInitialization
        2. 14.3.3.2 RS: RestBindingInitialization
        3. 14.3.3.3 RS: KeyedBindingInitialization
    4. +14.4 Empty Statement
      1. 14.4.1 RS: Evaluation
    5. +14.5 Expression Statement
      1. 14.5.1 RS: Evaluation
    6. +14.6 Theif Statement
      1. 14.6.1 SS: Early Errors
      2. 14.6.2 RS: Evaluation
    7. +14.7 Iteration Statements
      1. +14.7.1 Semantics
        1. 14.7.1.1 LoopContinues (completion,labelSet )
        2. 14.7.1.2 RS: LoopEvaluation
      2. +14.7.2 Thedo-while Statement
        1. 14.7.2.1 SS: Early Errors
        2. 14.7.2.2 RS: DoWhileLoopEvaluation
      3. +14.7.3 Thewhile Statement
        1. 14.7.3.1 SS: Early Errors
        2. 14.7.3.2 RS: WhileLoopEvaluation
      4. +14.7.4 Thefor Statement
        1. 14.7.4.1 SS: Early Errors
        2. 14.7.4.2 RS: ForLoopEvaluation
        3. 14.7.4.3 ForBodyEvaluation (test,increment,stmt,perIterationBindings,labelSet )
        4. 14.7.4.4 CreatePerIterationEnvironment (perIterationBindings )
      5. +14.7.5 Thefor-in,for-of, andfor-await-of Statements
        1. 14.7.5.1 SS: Early Errors
        2. 14.7.5.2 SS: IsDestructuring
        3. 14.7.5.3 RS: ForDeclarationBindingInitialization
        4. 14.7.5.4 RS: ForDeclarationBindingInstantiation
        5. 14.7.5.5 RS: ForInOfLoopEvaluation
        6. 14.7.5.6 ForIn/OfHeadEvaluation (uninitializedBoundNames,expr,iterationKind )
        7. 14.7.5.7 ForIn/OfBodyEvaluation (lhs,stmt,iteratorRecord,iterationKind,lhsKind,labelSet [ ,iteratorKind ] )
        8. 14.7.5.8 RS: Evaluation
        9. 14.7.5.9 EnumerateObjectProperties (O )
        10. +14.7.5.10 For-In Iterator Objects
          1. 14.7.5.10.1 CreateForInIterator (object )
          2. +14.7.5.10.2 The %ForInIteratorPrototype% Object
            1. 14.7.5.10.2.1 %ForInIteratorPrototype%.next ( )
          3. 14.7.5.10.3 Properties of For-In Iterator Instances
    8. +14.8 Thecontinue Statement
      1. 14.8.1 SS: Early Errors
      2. 14.8.2 RS: Evaluation
    9. +14.9 Thebreak Statement
      1. 14.9.1 SS: Early Errors
      2. 14.9.2 RS: Evaluation
    10. +14.10 Thereturn Statement
      1. 14.10.1 RS: Evaluation
    11. +14.11 Thewith Statement
      1. 14.11.1 SS: Early Errors
      2. 14.11.2 RS: Evaluation
    12. +14.12 Theswitch Statement
      1. 14.12.1 SS: Early Errors
      2. 14.12.2 RS: CaseBlockEvaluation
      3. 14.12.3 CaseClauseIsSelected (C,input )
      4. 14.12.4 RS: Evaluation
    13. +14.13 Labelled Statements
      1. 14.13.1 SS: Early Errors
      2. 14.13.2 SS: IsLabelledFunction (stmt )
      3. 14.13.3 RS: Evaluation
      4. 14.13.4 RS: LabelledEvaluation
    14. +14.14 Thethrow Statement
      1. 14.14.1 RS: Evaluation
    15. +14.15 Thetry Statement
      1. 14.15.1 SS: Early Errors
      2. 14.15.2 RS: CatchClauseEvaluation
      3. 14.15.3 RS: Evaluation
    16. +14.16 Thedebugger Statement
      1. 14.16.1 RS: Evaluation
  16. +15 ECMAScript Language: Functions and Classes
    1. +15.1 Parameter Lists
      1. 15.1.1 SS: Early Errors
      2. 15.1.2 SS: ContainsExpression
      3. 15.1.3 SS: IsSimpleParameterList
      4. 15.1.4 SS: HasInitializer
      5. 15.1.5 SS: ExpectedArgumentCount
    2. +15.2 Function Definitions
      1. 15.2.1 SS: Early Errors
      2. 15.2.2 SS: FunctionBodyContainsUseStrict
      3. 15.2.3 RS: EvaluateFunctionBody
      4. 15.2.4 RS: InstantiateOrdinaryFunctionObject
      5. 15.2.5 RS: InstantiateOrdinaryFunctionExpression
      6. 15.2.6 RS: Evaluation
    3. +15.3 Arrow Function Definitions
      1. 15.3.1 SS: Early Errors
      2. 15.3.2 SS: ConciseBodyContainsUseStrict
      3. 15.3.3 RS: EvaluateConciseBody
      4. 15.3.4 RS: InstantiateArrowFunctionExpression
      5. 15.3.5 RS: Evaluation
    4. +15.4 Method Definitions
      1. 15.4.1 SS: Early Errors
      2. 15.4.2 SS: HasDirectSuper
      3. 15.4.3 SS: SpecialMethod
      4. 15.4.4 RS: DefineMethod
      5. 15.4.5 RS: MethodDefinitionEvaluation
    5. +15.5 Generator Function Definitions
      1. 15.5.1 SS: Early Errors
      2. 15.5.2 RS: EvaluateGeneratorBody
      3. 15.5.3 RS: InstantiateGeneratorFunctionObject
      4. 15.5.4 RS: InstantiateGeneratorFunctionExpression
      5. 15.5.5 RS: Evaluation
    6. +15.6 Async Generator Function Definitions
      1. 15.6.1 SS: Early Errors
      2. 15.6.2 RS: EvaluateAsyncGeneratorBody
      3. 15.6.3 RS: InstantiateAsyncGeneratorFunctionObject
      4. 15.6.4 RS: InstantiateAsyncGeneratorFunctionExpression
      5. 15.6.5 RS: Evaluation
    7. +15.7 Class Definitions
      1. 15.7.1 SS: Early Errors
      2. 15.7.2 SS: ClassElementKind
      3. 15.7.3 SS: ConstructorMethod
      4. 15.7.4 SS: IsStatic
      5. 15.7.5 SS: NonConstructorElements
      6. 15.7.6 SS: PrototypePropertyNameList
      7. 15.7.7 SS: AllPrivateIdentifiersValid
      8. 15.7.8 SS: PrivateBoundIdentifiers
      9. 15.7.9 SS: ContainsArguments
      10. 15.7.10 RS: ClassFieldDefinitionEvaluation
      11. 15.7.11 RS: ClassStaticBlockDefinitionEvaluation
      12. 15.7.12 RS: EvaluateClassStaticBlockBody
      13. 15.7.13 RS: ClassElementEvaluation
      14. 15.7.14 RS: ClassDefinitionEvaluation
      15. 15.7.15 RS: BindingClassDeclarationEvaluation
      16. 15.7.16 RS: Evaluation
    8. +15.8 Async Function Definitions
      1. 15.8.1 SS: Early Errors
      2. 15.8.2 RS: InstantiateAsyncFunctionObject
      3. 15.8.3 RS: InstantiateAsyncFunctionExpression
      4. 15.8.4 RS: EvaluateAsyncFunctionBody
      5. 15.8.5 RS: Evaluation
    9. +15.9 Async Arrow Function Definitions
      1. 15.9.1 SS: Early Errors
      2. 15.9.2 SS: AsyncConciseBodyContainsUseStrict
      3. 15.9.3 RS: EvaluateAsyncConciseBody
      4. 15.9.4 RS: InstantiateAsyncArrowFunctionExpression
      5. 15.9.5 RS: Evaluation
    10. +15.10 Tail Position Calls
      1. 15.10.1 SS: IsInTailPosition (call )
      2. 15.10.2 SS: HasCallInTailPosition
      3. 15.10.3 PrepareForTailCall ( )
  17. +16 ECMAScript Language: Scripts and Modules
    1. +16.1 Scripts
      1. 16.1.1 SS: Early Errors
      2. 16.1.2 SS: ScriptIsStrict
      3. 16.1.3 RS: Evaluation
      4. 16.1.4 Script Records
      5. 16.1.5 ParseScript (sourceText,realm,hostDefined )
      6. 16.1.6 ScriptEvaluation (scriptRecord )
      7. 16.1.7 GlobalDeclarationInstantiation (script,env )
    2. +16.2 Modules
      1. +16.2.1 Module Semantics
        1. 16.2.1.1 SS: Early Errors
        2. 16.2.1.2 SS: ImportedLocalNames (importEntries )
        3. +16.2.1.3 ModuleRequest Records
          1. 16.2.1.3.1 ModuleRequestsEqual (left,right )
        4. 16.2.1.4 SS: ModuleRequests
        5. +16.2.1.5 Abstract Module Records
          1. 16.2.1.5.1 EvaluateModuleSync (module )
        6. +16.2.1.6 Cyclic Module Records
          1. +16.2.1.6.1 Implementation of Module Record Abstract Methods
            1. +16.2.1.6.1.1 LoadRequestedModules ( [hostDefined ] )
              1. 16.2.1.6.1.1.1 InnerModuleLoading (state,module )
              2. 16.2.1.6.1.1.2 ContinueModuleLoading (state,moduleCompletion )
            2. +16.2.1.6.1.2 Link ( )
              1. 16.2.1.6.1.2.1 InnerModuleLinking (module,stack,index )
            3. +16.2.1.6.1.3 Evaluate ( )
              1. 16.2.1.6.1.3.1 InnerModuleEvaluation (module,stack,index )
              2. 16.2.1.6.1.3.2 ExecuteAsyncModule (module )
              3. 16.2.1.6.1.3.3 GatherAvailableAncestors (module,execList )
              4. 16.2.1.6.1.3.4 AsyncModuleExecutionFulfilled (module )
              5. 16.2.1.6.1.3.5 AsyncModuleExecutionRejected (module,error )
          2. 16.2.1.6.2 Example Cyclic Module Record Graphs
        7. +16.2.1.7 Source Text Module Records
          1. 16.2.1.7.1 ParseModule (sourceText,realm,hostDefined )
          2. +16.2.1.7.2 Implementation of Module Record Abstract Methods
            1. 16.2.1.7.2.1 GetExportedNames ( [exportStarSet ] )
            2. 16.2.1.7.2.2 ResolveExport (exportName [ ,resolveSet ] )
          3. +16.2.1.7.3 Implementation of Cyclic Module Record Abstract Methods
            1. 16.2.1.7.3.1 InitializeEnvironment ( )
            2. 16.2.1.7.3.2 ExecuteModule ( [capability ] )
        8. +16.2.1.8 Synthetic Module Records
          1. 16.2.1.8.1 CreateDefaultExportSyntheticModule (defaultExport )
          2. 16.2.1.8.2 ParseJSONModule (source )
          3. 16.2.1.8.3 SetSyntheticModuleExport (module,exportName,exportValue )
          4. +16.2.1.8.4 Implementation of Module Record Abstract Methods
            1. 16.2.1.8.4.1 LoadRequestedModules ( )
            2. 16.2.1.8.4.2 GetExportedNames ( )
            3. 16.2.1.8.4.3 ResolveExport (exportName )
            4. 16.2.1.8.4.4 Link ( )
            5. 16.2.1.8.4.5 Evaluate ( )
        9. 16.2.1.9 GetImportedModule (referrer,request )
        10. 16.2.1.10 HostLoadImportedModule (referrer,moduleRequest,hostDefined,payload )
        11. 16.2.1.11 FinishLoadingImportedModule (referrer,moduleRequest,payload,result )
        12. +16.2.1.12 AllImportAttributesSupported (attributes )
          1. 16.2.1.12.1 HostGetSupportedImportAttributes ( )
        13. 16.2.1.13 GetModuleNamespace (module )
        14. 16.2.1.14 RS: Evaluation
      2. +16.2.2 Imports
        1. 16.2.2.1 SS: Early Errors
        2. 16.2.2.2 SS: ImportEntries
        3. 16.2.2.3 SS: ImportEntriesForModule
        4. 16.2.2.4 SS: WithClauseToAttributes
      3. +16.2.3 Exports
        1. 16.2.3.1 SS: Early Errors
        2. 16.2.3.2 SS: ExportedBindings
        3. 16.2.3.3 SS: ExportedNames
        4. 16.2.3.4 SS: ExportEntries
        5. 16.2.3.5 SS: ExportEntriesForModule
        6. 16.2.3.6 SS: ReferencedBindings
        7. 16.2.3.7 RS: Evaluation
  18. +17 Error Handling and Language Extensions
    1. 17.1 Forbidden Extensions
  19. 18 ECMAScript Standard Built-in Objects
  20. +19 The Global Object
    1. +19.1 Value Properties of the Global Object
      1. 19.1.1 globalThis
      2. 19.1.2 Infinity
      3. 19.1.3 NaN
      4. 19.1.4 undefined
    2. +19.2 Function Properties of the Global Object
      1. +19.2.1 eval (x )
        1. 19.2.1.1 PerformEval (x,strictCaller,direct )
        2. 19.2.1.2 HostEnsureCanCompileStrings (calleeRealm,parameterStrings,bodyString,direct )
        3. 19.2.1.3 EvalDeclarationInstantiation (body,varEnv,lexEnv,privateEnv,strict )
      2. 19.2.2 isFinite (number )
      3. 19.2.3 isNaN (number )
      4. 19.2.4 parseFloat (string )
      5. 19.2.5 parseInt (string,radix )
      6. +19.2.6 URI Handling Functions
        1. 19.2.6.1 decodeURI (encodedURI )
        2. 19.2.6.2 decodeURIComponent (encodedURIComponent )
        3. 19.2.6.3 encodeURI (uri )
        4. 19.2.6.4 encodeURIComponent (uriComponent )
        5. 19.2.6.5 Encode (string,extraUnescaped )
        6. 19.2.6.6 Decode (string,preserveEscapeSet )
        7. 19.2.6.7 ParseHexOctet (string,position )
    3. +19.3 Constructor Properties of the Global Object
      1. 19.3.1 AggregateError ( . . . )
      2. 19.3.2 Array ( . . . )
      3. 19.3.3 ArrayBuffer ( . . . )
      4. 19.3.4 BigInt ( . . . )
      5. 19.3.5 BigInt64Array ( . . . )
      6. 19.3.6 BigUint64Array ( . . . )
      7. 19.3.7 Boolean ( . . . )
      8. 19.3.8 DataView ( . . . )
      9. 19.3.9 Date ( . . . )
      10. 19.3.10 Error ( . . . )
      11. 19.3.11 EvalError ( . . . )
      12. 19.3.12 FinalizationRegistry ( . . . )
      13. 19.3.13 Float16Array ( . . . )
      14. 19.3.14 Float32Array ( . . . )
      15. 19.3.15 Float64Array ( . . . )
      16. 19.3.16 Function ( . . . )
      17. 19.3.17 Int8Array ( . . . )
      18. 19.3.18 Int16Array ( . . . )
      19. 19.3.19 Int32Array ( . . . )
      20. 19.3.20 Iterator ( . . . )
      21. 19.3.21 Map ( . . . )
      22. 19.3.22 Number ( . . . )
      23. 19.3.23 Object ( . . . )
      24. 19.3.24 Promise ( . . . )
      25. 19.3.25 Proxy ( . . . )
      26. 19.3.26 RangeError ( . . . )
      27. 19.3.27 ReferenceError ( . . . )
      28. 19.3.28 RegExp ( . . . )
      29. 19.3.29 Set ( . . . )
      30. 19.3.30 SharedArrayBuffer ( . . . )
      31. 19.3.31 String ( . . . )
      32. 19.3.32 Symbol ( . . . )
      33. 19.3.33 SyntaxError ( . . . )
      34. 19.3.34 TypeError ( . . . )
      35. 19.3.35 Uint8Array ( . . . )
      36. 19.3.36 Uint8ClampedArray ( . . . )
      37. 19.3.37 Uint16Array ( . . . )
      38. 19.3.38 Uint32Array ( . . . )
      39. 19.3.39 URIError ( . . . )
      40. 19.3.40 WeakMap ( . . . )
      41. 19.3.41 WeakRef ( . . . )
      42. 19.3.42 WeakSet ( . . . )
    4. +19.4 Other Properties of the Global Object
      1. 19.4.1 Atomics
      2. 19.4.2 JSON
      3. 19.4.3 Math
      4. 19.4.4 Reflect
  21. +20 Fundamental Objects
    1. +20.1 Object Objects
      1. +20.1.1 The Object Constructor
        1. 20.1.1.1 Object ( [value ] )
      2. +20.1.2 Properties of the Object Constructor
        1. 20.1.2.1 Object.assign (target, ...sources )
        2. 20.1.2.2 Object.create (O,Properties )
        3. +20.1.2.3 Object.defineProperties (O,Properties )
          1. 20.1.2.3.1 ObjectDefineProperties (O,Properties )
        4. 20.1.2.4 Object.defineProperty (O,P,Attributes )
        5. 20.1.2.5 Object.entries (O )
        6. 20.1.2.6 Object.freeze (O )
        7. 20.1.2.7 Object.fromEntries (iterable )
        8. 20.1.2.8 Object.getOwnPropertyDescriptor (O,P )
        9. 20.1.2.9 Object.getOwnPropertyDescriptors (O )
        10. 20.1.2.10 Object.getOwnPropertyNames (O )
        11. +20.1.2.11 Object.getOwnPropertySymbols (O )
          1. 20.1.2.11.1 GetOwnPropertyKeys (O,type )
        12. 20.1.2.12 Object.getPrototypeOf (O )
        13. 20.1.2.13 Object.groupBy (items,callback )
        14. 20.1.2.14 Object.hasOwn (O,P )
        15. 20.1.2.15 Object.is (value1,value2 )
        16. 20.1.2.16 Object.isExtensible (O )
        17. 20.1.2.17 Object.isFrozen (O )
        18. 20.1.2.18 Object.isSealed (O )
        19. 20.1.2.19 Object.keys (O )
        20. 20.1.2.20 Object.preventExtensions (O )
        21. 20.1.2.21 Object.prototype
        22. 20.1.2.22 Object.seal (O )
        23. 20.1.2.23 Object.setPrototypeOf (O,proto )
        24. 20.1.2.24 Object.values (O )
      3. +20.1.3 Properties of the Object Prototype Object
        1. 20.1.3.1 Object.prototype.constructor
        2. 20.1.3.2 Object.prototype.hasOwnProperty (V )
        3. 20.1.3.3 Object.prototype.isPrototypeOf (V )
        4. 20.1.3.4 Object.prototype.propertyIsEnumerable (V )
        5. 20.1.3.5 Object.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        6. 20.1.3.6 Object.prototype.toString ( )
        7. 20.1.3.7 Object.prototype.valueOf ( )
        8. +20.1.3.8 Object.prototype.__proto__
          1. 20.1.3.8.1 get Object.prototype.__proto__
          2. 20.1.3.8.2 set Object.prototype.__proto__
        9. +20.1.3.9 Legacy Object.prototype Accessor Methods
          1. 20.1.3.9.1 Object.prototype.__defineGetter__ (P,getter )
          2. 20.1.3.9.2 Object.prototype.__defineSetter__ (P,setter )
          3. 20.1.3.9.3 Object.prototype.__lookupGetter__ (P )
          4. 20.1.3.9.4 Object.prototype.__lookupSetter__ (P )
      4. 20.1.4 Properties of Object Instances
    2. +20.2 Function Objects
      1. +20.2.1 The Function Constructor
        1. +20.2.1.1 Function ( ...parameterArgs,bodyArg )
          1. 20.2.1.1.1 CreateDynamicFunction (constructor,newTarget,kind,parameterArgs,bodyArg )
      2. +20.2.2 Properties of the Function Constructor
        1. 20.2.2.1 Function.prototype
      3. +20.2.3 Properties of the Function Prototype Object
        1. 20.2.3.1 Function.prototype.apply (thisArg,argArray )
        2. 20.2.3.2 Function.prototype.bind (thisArg, ...args )
        3. 20.2.3.3 Function.prototype.call (thisArg, ...args )
        4. 20.2.3.4 Function.prototype.constructor
        5. 20.2.3.5 Function.prototype.toString ( )
        6. 20.2.3.6 Function.prototype [ %Symbol.hasInstance% ] (V )
      4. +20.2.4 Function Instances
        1. 20.2.4.1 length
        2. 20.2.4.2 name
        3. 20.2.4.3 prototype
      5. 20.2.5 HostHasSourceTextAvailable (func )
    3. +20.3 Boolean Objects
      1. +20.3.1 The Boolean Constructor
        1. 20.3.1.1 Boolean (value )
      2. +20.3.2 Properties of the Boolean Constructor
        1. 20.3.2.1 Boolean.prototype
      3. +20.3.3 Properties of the Boolean Prototype Object
        1. 20.3.3.1 Boolean.prototype.constructor
        2. 20.3.3.2 Boolean.prototype.toString ( )
        3. +20.3.3.3 Boolean.prototype.valueOf ( )
          1. 20.3.3.3.1 ThisBooleanValue (value )
      4. 20.3.4 Properties of Boolean Instances
    4. +20.4 Symbol Objects
      1. +20.4.1 The Symbol Constructor
        1. 20.4.1.1 Symbol ( [description ] )
      2. +20.4.2 Properties of the Symbol Constructor
        1. 20.4.2.1 Symbol.asyncIterator
        2. 20.4.2.2 Symbol.for (key )
        3. 20.4.2.3 Symbol.hasInstance
        4. 20.4.2.4 Symbol.isConcatSpreadable
        5. 20.4.2.5 Symbol.iterator
        6. 20.4.2.6 Symbol.keyFor (sym )
        7. 20.4.2.7 Symbol.match
        8. 20.4.2.8 Symbol.matchAll
        9. 20.4.2.9 Symbol.prototype
        10. 20.4.2.10 Symbol.replace
        11. 20.4.2.11 Symbol.search
        12. 20.4.2.12 Symbol.species
        13. 20.4.2.13 Symbol.split
        14. 20.4.2.14 Symbol.toPrimitive
        15. 20.4.2.15 Symbol.toStringTag
        16. 20.4.2.16 Symbol.unscopables
      3. +20.4.3 Properties of the Symbol Prototype Object
        1. 20.4.3.1 Symbol.prototype.constructor
        2. 20.4.3.2 get Symbol.prototype.description
        3. +20.4.3.3 Symbol.prototype.toString ( )
          1. 20.4.3.3.1 SymbolDescriptiveString (sym )
        4. +20.4.3.4 Symbol.prototype.valueOf ( )
          1. 20.4.3.4.1 ThisSymbolValue (value )
        5. 20.4.3.5 Symbol.prototype [ %Symbol.toPrimitive% ] (hint )
        6. 20.4.3.6 Symbol.prototype [ %Symbol.toStringTag% ]
      4. 20.4.4 Properties of Symbol Instances
      5. +20.4.5 Abstract Operations for Symbols
        1. 20.4.5.1 KeyForSymbol (sym )
    5. +20.5 Error Objects
      1. +20.5.1 The Error Constructor
        1. 20.5.1.1 Error (message [ ,options ] )
      2. +20.5.2 Properties of the Error Constructor
        1. 20.5.2.1 Error.isError (arg )
        2. 20.5.2.2 Error.prototype
      3. +20.5.3 Properties of the Error Prototype Object
        1. 20.5.3.1 Error.prototype.constructor
        2. 20.5.3.2 Error.prototype.message
        3. 20.5.3.3 Error.prototype.name
        4. 20.5.3.4 Error.prototype.toString ( )
      4. 20.5.4 Properties of Error Instances
      5. +20.5.5 Native Error Types Used in This Standard
        1. 20.5.5.1 EvalError
        2. 20.5.5.2 RangeError
        3. 20.5.5.3 ReferenceError
        4. 20.5.5.4 SyntaxError
        5. 20.5.5.5 TypeError
        6. 20.5.5.6 URIError
      6. +20.5.6NativeError Object Structure
        1. +20.5.6.1 TheNativeError Constructors
          1. 20.5.6.1.1NativeError (message [ ,options ] )
        2. +20.5.6.2 Properties of theNativeError Constructors
          1. 20.5.6.2.1NativeError.prototype
        3. +20.5.6.3 Properties of theNativeError Prototype Objects
          1. 20.5.6.3.1NativeError.prototype.constructor
          2. 20.5.6.3.2NativeError.prototype.message
          3. 20.5.6.3.3NativeError.prototype.name
        4. 20.5.6.4 Properties ofNativeError Instances
      7. +20.5.7 AggregateError Objects
        1. +20.5.7.1 The AggregateError Constructor
          1. 20.5.7.1.1 AggregateError (errors,message [ ,options ] )
        2. +20.5.7.2 Properties of the AggregateError Constructor
          1. 20.5.7.2.1 AggregateError.prototype
        3. +20.5.7.3 Properties of the AggregateError Prototype Object
          1. 20.5.7.3.1 AggregateError.prototype.constructor
          2. 20.5.7.3.2 AggregateError.prototype.message
          3. 20.5.7.3.3 AggregateError.prototype.name
        4. 20.5.7.4 Properties of AggregateError Instances
      8. +20.5.8 Abstract Operations for Error Objects
        1. 20.5.8.1 InstallErrorCause (O,options )
  22. +21 Numbers and Dates
    1. +21.1 Number Objects
      1. +21.1.1 The Number Constructor
        1. 21.1.1.1 Number (value )
      2. +21.1.2 Properties of the Number Constructor
        1. 21.1.2.1 Number.EPSILON
        2. 21.1.2.2 Number.isFinite (number )
        3. 21.1.2.3 Number.isInteger (number )
        4. 21.1.2.4 Number.isNaN (number )
        5. 21.1.2.5 Number.isSafeInteger (number )
        6. 21.1.2.6 Number.MAX_SAFE_INTEGER
        7. 21.1.2.7 Number.MAX_VALUE
        8. 21.1.2.8 Number.MIN_SAFE_INTEGER
        9. 21.1.2.9 Number.MIN_VALUE
        10. 21.1.2.10 Number.NaN
        11. 21.1.2.11 Number.NEGATIVE_INFINITY
        12. 21.1.2.12 Number.parseFloat (string )
        13. 21.1.2.13 Number.parseInt (string,radix )
        14. 21.1.2.14 Number.POSITIVE_INFINITY
        15. 21.1.2.15 Number.prototype
      3. +21.1.3 Properties of the Number Prototype Object
        1. 21.1.3.1 Number.prototype.constructor
        2. 21.1.3.2 Number.prototype.toExponential (fractionDigits )
        3. 21.1.3.3 Number.prototype.toFixed (fractionDigits )
        4. 21.1.3.4 Number.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        5. 21.1.3.5 Number.prototype.toPrecision (precision )
        6. 21.1.3.6 Number.prototype.toString ( [radix ] )
        7. +21.1.3.7 Number.prototype.valueOf ( )
          1. 21.1.3.7.1 ThisNumberValue (value )
      4. 21.1.4 Properties of Number Instances
    2. +21.2 BigInt Objects
      1. +21.2.1 The BigInt Constructor
        1. +21.2.1.1 BigInt (value )
          1. 21.2.1.1.1 NumberToBigInt (number )
      2. +21.2.2 Properties of the BigInt Constructor
        1. 21.2.2.1 BigInt.asIntN (bits,bigint )
        2. 21.2.2.2 BigInt.asUintN (bits,bigint )
        3. 21.2.2.3 BigInt.prototype
      3. +21.2.3 Properties of the BigInt Prototype Object
        1. 21.2.3.1 BigInt.prototype.constructor
        2. 21.2.3.2 BigInt.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        3. 21.2.3.3 BigInt.prototype.toString ( [radix ] )
        4. +21.2.3.4 BigInt.prototype.valueOf ( )
          1. 21.2.3.4.1 ThisBigIntValue (value )
        5. 21.2.3.5 BigInt.prototype [ %Symbol.toStringTag% ]
      4. 21.2.4 Properties of BigInt Instances
    3. +21.3 The Math Object
      1. +21.3.1 Value Properties of the Math Object
        1. 21.3.1.1 Math.E
        2. 21.3.1.2 Math.LN10
        3. 21.3.1.3 Math.LN2
        4. 21.3.1.4 Math.LOG10E
        5. 21.3.1.5 Math.LOG2E
        6. 21.3.1.6 Math.PI
        7. 21.3.1.7 Math.SQRT1_2
        8. 21.3.1.8 Math.SQRT2
        9. 21.3.1.9 Math [ %Symbol.toStringTag% ]
      2. +21.3.2 Function Properties of the Math Object
        1. 21.3.2.1 Math.abs (x )
        2. 21.3.2.2 Math.acos (x )
        3. 21.3.2.3 Math.acosh (x )
        4. 21.3.2.4 Math.asin (x )
        5. 21.3.2.5 Math.asinh (x )
        6. 21.3.2.6 Math.atan (x )
        7. 21.3.2.7 Math.atanh (x )
        8. 21.3.2.8 Math.atan2 (y,x )
        9. 21.3.2.9 Math.cbrt (x )
        10. 21.3.2.10 Math.ceil (x )
        11. 21.3.2.11 Math.clz32 (x )
        12. 21.3.2.12 Math.cos (x )
        13. 21.3.2.13 Math.cosh (x )
        14. 21.3.2.14 Math.exp (x )
        15. 21.3.2.15 Math.expm1 (x )
        16. 21.3.2.16 Math.floor (x )
        17. 21.3.2.17 Math.fround (x )
        18. 21.3.2.18 Math.f16round (x )
        19. 21.3.2.19 Math.hypot ( ...args )
        20. 21.3.2.20 Math.imul (x,y )
        21. 21.3.2.21 Math.log (x )
        22. 21.3.2.22 Math.log1p (x )
        23. 21.3.2.23 Math.log10 (x )
        24. 21.3.2.24 Math.log2 (x )
        25. 21.3.2.25 Math.max ( ...args )
        26. 21.3.2.26 Math.min ( ...args )
        27. 21.3.2.27 Math.pow (base,exponent )
        28. 21.3.2.28 Math.random ( )
        29. 21.3.2.29 Math.round (x )
        30. 21.3.2.30 Math.sign (x )
        31. 21.3.2.31 Math.sin (x )
        32. 21.3.2.32 Math.sinh (x )
        33. 21.3.2.33 Math.sqrt (x )
        34. 21.3.2.34 Math.sumPrecise (items )
        35. 21.3.2.35 Math.tan (x )
        36. 21.3.2.36 Math.tanh (x )
        37. 21.3.2.37 Math.trunc (x )
    4. +21.4 Date Objects
      1. +21.4.1 Overview of Date Objects and Definitions of Abstract Operations
        1. 21.4.1.1 Time Values and Time Range
        2. 21.4.1.2 Time-related Constants
        3. 21.4.1.3 Day (t )
        4. 21.4.1.4 TimeWithinDay (t )
        5. 21.4.1.5 DaysInYear (y )
        6. 21.4.1.6 DayFromYear (y )
        7. 21.4.1.7 TimeFromYear (y )
        8. 21.4.1.8 YearFromTime (t )
        9. 21.4.1.9 DayWithinYear (t )
        10. 21.4.1.10 InLeapYear (t )
        11. 21.4.1.11 MonthFromTime (t )
        12. 21.4.1.12 DateFromTime (t )
        13. 21.4.1.13 WeekDay (t )
        14. 21.4.1.14 HourFromTime (t )
        15. 21.4.1.15 MinFromTime (t )
        16. 21.4.1.16 SecFromTime (t )
        17. 21.4.1.17 msFromTime (t )
        18. 21.4.1.18 GetUTCEpochNanoseconds (year,month,day,hour,minute,second,millisecond,microsecond,nanosecond )
        19. 21.4.1.19 Time Zone Identifiers
        20. 21.4.1.20 GetNamedTimeZoneEpochNanoseconds (timeZoneIdentifier,year,month,day,hour,minute,second,millisecond,microsecond,nanosecond )
        21. 21.4.1.21 GetNamedTimeZoneOffsetNanoseconds (timeZoneIdentifier,epochNanoseconds )
        22. 21.4.1.22 Time Zone Identifier Record
        23. 21.4.1.23 AvailableNamedTimeZoneIdentifiers ( )
        24. 21.4.1.24 SystemTimeZoneIdentifier ( )
        25. 21.4.1.25 LocalTime (t )
        26. 21.4.1.26 UTC (t )
        27. 21.4.1.27 MakeTime (hour,min,sec,ms )
        28. 21.4.1.28 MakeDay (year,month,date )
        29. 21.4.1.29 MakeDate (day,time )
        30. 21.4.1.30 MakeFullYear (year )
        31. 21.4.1.31 TimeClip (time )
        32. +21.4.1.32 Date Time String Format
          1. 21.4.1.32.1 Expanded Years
        33. +21.4.1.33 Time Zone Offset String Format
          1. 21.4.1.33.1 IsTimeZoneOffsetString (offsetString )
          2. 21.4.1.33.2 ParseTimeZoneOffsetString (offsetString )
      2. +21.4.2 The Date Constructor
        1. 21.4.2.1 Date ( ...values )
      3. +21.4.3 Properties of the Date Constructor
        1. 21.4.3.1 Date.now ( )
        2. 21.4.3.2 Date.parse (string )
        3. 21.4.3.3 Date.prototype
        4. 21.4.3.4 Date.UTC (year [ ,month [ ,date [ ,hours [ ,minutes [ ,seconds [ ,ms ] ] ] ] ] ] )
      4. +21.4.4 Properties of the Date Prototype Object
        1. 21.4.4.1 Date.prototype.constructor
        2. 21.4.4.2 Date.prototype.getDate ( )
        3. 21.4.4.3 Date.prototype.getDay ( )
        4. 21.4.4.4 Date.prototype.getFullYear ( )
        5. 21.4.4.5 Date.prototype.getHours ( )
        6. 21.4.4.6 Date.prototype.getMilliseconds ( )
        7. 21.4.4.7 Date.prototype.getMinutes ( )
        8. 21.4.4.8 Date.prototype.getMonth ( )
        9. 21.4.4.9 Date.prototype.getSeconds ( )
        10. 21.4.4.10 Date.prototype.getTime ( )
        11. 21.4.4.11 Date.prototype.getTimezoneOffset ( )
        12. 21.4.4.12 Date.prototype.getUTCDate ( )
        13. 21.4.4.13 Date.prototype.getUTCDay ( )
        14. 21.4.4.14 Date.prototype.getUTCFullYear ( )
        15. 21.4.4.15 Date.prototype.getUTCHours ( )
        16. 21.4.4.16 Date.prototype.getUTCMilliseconds ( )
        17. 21.4.4.17 Date.prototype.getUTCMinutes ( )
        18. 21.4.4.18 Date.prototype.getUTCMonth ( )
        19. 21.4.4.19 Date.prototype.getUTCSeconds ( )
        20. 21.4.4.20 Date.prototype.setDate (date )
        21. 21.4.4.21 Date.prototype.setFullYear (year [ ,month [ ,date ] ] )
        22. 21.4.4.22 Date.prototype.setHours (hour [ ,min [ ,sec [ ,ms ] ] ] )
        23. 21.4.4.23 Date.prototype.setMilliseconds (ms )
        24. 21.4.4.24 Date.prototype.setMinutes (min [ ,sec [ ,ms ] ] )
        25. 21.4.4.25 Date.prototype.setMonth (month [ ,date ] )
        26. 21.4.4.26 Date.prototype.setSeconds (sec [ ,ms ] )
        27. 21.4.4.27 Date.prototype.setTime (time )
        28. 21.4.4.28 Date.prototype.setUTCDate (date )
        29. 21.4.4.29 Date.prototype.setUTCFullYear (year [ ,month [ ,date ] ] )
        30. 21.4.4.30 Date.prototype.setUTCHours (hour [ ,min [ ,sec [ ,ms ] ] ] )
        31. 21.4.4.31 Date.prototype.setUTCMilliseconds (ms )
        32. 21.4.4.32 Date.prototype.setUTCMinutes (min [ ,sec [ ,ms ] ] )
        33. 21.4.4.33 Date.prototype.setUTCMonth (month [ ,date ] )
        34. 21.4.4.34 Date.prototype.setUTCSeconds (sec [ ,ms ] )
        35. 21.4.4.35 Date.prototype.toDateString ( )
        36. 21.4.4.36 Date.prototype.toISOString ( )
        37. 21.4.4.37 Date.prototype.toJSON (key )
        38. 21.4.4.38 Date.prototype.toLocaleDateString ( [reserved1 [ ,reserved2 ] ] )
        39. 21.4.4.39 Date.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        40. 21.4.4.40 Date.prototype.toLocaleTimeString ( [reserved1 [ ,reserved2 ] ] )
        41. +21.4.4.41 Date.prototype.toString ( )
          1. 21.4.4.41.1 TimeString (tv )
          2. 21.4.4.41.2 DateString (tv )
          3. 21.4.4.41.3 TimeZoneString (tv )
          4. 21.4.4.41.4 ToDateString (tv )
        42. 21.4.4.42 Date.prototype.toTimeString ( )
        43. 21.4.4.43 Date.prototype.toUTCString ( )
        44. 21.4.4.44 Date.prototype.valueOf ( )
        45. 21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] (hint )
      5. 21.4.5 Properties of Date Instances
  23. +22 Text Processing
    1. +22.1 String Objects
      1. +22.1.1 The String Constructor
        1. 22.1.1.1 String (value )
      2. +22.1.2 Properties of the String Constructor
        1. 22.1.2.1 String.fromCharCode ( ...codeUnits )
        2. 22.1.2.2 String.fromCodePoint ( ...codePoints )
        3. 22.1.2.3 String.prototype
        4. 22.1.2.4 String.raw (template, ...substitutions )
      3. +22.1.3 Properties of the String Prototype Object
        1. 22.1.3.1 String.prototype.at (index )
        2. 22.1.3.2 String.prototype.charAt (pos )
        3. 22.1.3.3 String.prototype.charCodeAt (pos )
        4. 22.1.3.4 String.prototype.codePointAt (pos )
        5. 22.1.3.5 String.prototype.concat ( ...args )
        6. 22.1.3.6 String.prototype.constructor
        7. 22.1.3.7 String.prototype.endsWith (searchString [ ,endPosition ] )
        8. 22.1.3.8 String.prototype.includes (searchString [ ,position ] )
        9. 22.1.3.9 String.prototype.indexOf (searchString [ ,position ] )
        10. 22.1.3.10 String.prototype.isWellFormed ( )
        11. 22.1.3.11 String.prototype.lastIndexOf (searchString [ ,position ] )
        12. 22.1.3.12 String.prototype.localeCompare (that [ ,reserved1 [ ,reserved2 ] ] )
        13. 22.1.3.13 String.prototype.match (regexp )
        14. 22.1.3.14 String.prototype.matchAll (regexp )
        15. 22.1.3.15 String.prototype.normalize ( [form ] )
        16. 22.1.3.16 String.prototype.padEnd (maxLength [ ,fillString ] )
        17. +22.1.3.17 String.prototype.padStart (maxLength [ ,fillString ] )
          1. 22.1.3.17.1 StringPaddingBuiltinsImpl (O,maxLength,fillString,placement )
          2. 22.1.3.17.2 StringPad (S,maxLength,fillString,placement )
          3. 22.1.3.17.3 ToZeroPaddedDecimalString (n,minLength )
        18. 22.1.3.18 String.prototype.repeat (count )
        19. +22.1.3.19 String.prototype.replace (searchValue,replaceValue )
          1. 22.1.3.19.1 GetSubstitution (matched,str,position,captures,namedCaptures,replacementTemplate )
        20. 22.1.3.20 String.prototype.replaceAll (searchValue,replaceValue )
        21. 22.1.3.21 String.prototype.search (regexp )
        22. 22.1.3.22 String.prototype.slice (start,end )
        23. 22.1.3.23 String.prototype.split (separator,limit )
        24. 22.1.3.24 String.prototype.startsWith (searchString [ ,position ] )
        25. 22.1.3.25 String.prototype.substring (start,end )
        26. 22.1.3.26 String.prototype.toLocaleLowerCase ( [reserved1 [ ,reserved2 ] ] )
        27. 22.1.3.27 String.prototype.toLocaleUpperCase ( [reserved1 [ ,reserved2 ] ] )
        28. 22.1.3.28 String.prototype.toLowerCase ( )
        29. 22.1.3.29 String.prototype.toString ( )
        30. 22.1.3.30 String.prototype.toUpperCase ( )
        31. 22.1.3.31 String.prototype.toWellFormed ( )
        32. +22.1.3.32 String.prototype.trim ( )
          1. 22.1.3.32.1 TrimString (string,where )
        33. 22.1.3.33 String.prototype.trimEnd ( )
        34. 22.1.3.34 String.prototype.trimStart ( )
        35. +22.1.3.35 String.prototype.valueOf ( )
          1. 22.1.3.35.1 ThisStringValue (value )
        36. 22.1.3.36 String.prototype [ %Symbol.iterator% ] ( )
      4. +22.1.4 Properties of String Instances
        1. 22.1.4.1 length
      5. +22.1.5 String Iterator Objects
        1. +22.1.5.1 The %StringIteratorPrototype% Object
          1. 22.1.5.1.1 %StringIteratorPrototype%.next ( )
          2. 22.1.5.1.2 %StringIteratorPrototype% [ %Symbol.toStringTag% ]
    2. +22.2 RegExp (Regular Expression) Objects
      1. +22.2.1 Patterns
        1. 22.2.1.1 SS: Early Errors
        2. 22.2.1.2 SS: CountLeftCapturingParensWithin (node )
        3. 22.2.1.3 SS: CountLeftCapturingParensBefore (node )
        4. 22.2.1.4 SS: MightBothParticipate (x,y )
        5. 22.2.1.5 SS: CapturingGroupNumber
        6. 22.2.1.6 SS: IsCharacterClass
        7. 22.2.1.7 SS: CharacterValue
        8. 22.2.1.8 SS: MayContainStrings
        9. 22.2.1.9 SS: GroupSpecifiersThatMatch (thisGroupName )
        10. 22.2.1.10 SS: CapturingGroupName
        11. 22.2.1.11 SS: RegExpIdentifierCodePoints
        12. 22.2.1.12 SS: RegExpIdentifierCodePoint
      2. +22.2.2 Pattern Semantics
        1. +22.2.2.1 Notation
          1. 22.2.2.1.1 RegExp Records
        2. 22.2.2.2 RS: CompilePattern
        3. +22.2.2.3 RS: CompileSubpattern
          1. 22.2.2.3.1 RepeatMatcher (m,min,max,greedy,x,c,parenIndex,parenCount )
          2. 22.2.2.3.2 EmptyMatcher ( )
          3. 22.2.2.3.3 MatchTwoAlternatives (m1,m2 )
          4. 22.2.2.3.4 MatchSequence (m1,m2,direction )
        4. +22.2.2.4 RS: CompileAssertion
          1. 22.2.2.4.1 IsWordChar (rer,Input,e )
        5. 22.2.2.5 RS: CompileQuantifier
        6. 22.2.2.6 RS: CompileQuantifierPrefix
        7. +22.2.2.7 RS: CompileAtom
          1. 22.2.2.7.1 CharacterSetMatcher (rer,A,invert,direction )
          2. 22.2.2.7.2 BackreferenceMatcher (rer,ns,direction )
          3. 22.2.2.7.3 Canonicalize (rer,ch )
          4. 22.2.2.7.4 UpdateModifiers (rer,add,remove )
        8. 22.2.2.8 RS: CompileCharacterClass
        9. +22.2.2.9 RS: CompileToCharSet
          1. 22.2.2.9.1 CharacterRange (A,B )
          2. 22.2.2.9.2 HasEitherUnicodeFlag (rer )
          3. 22.2.2.9.3 WordCharacters (rer )
          4. 22.2.2.9.4 AllCharacters (rer )
          5. 22.2.2.9.5 MaybeSimpleCaseFolding (rer,A )
          6. 22.2.2.9.6 CharacterComplement (rer,S )
          7. 22.2.2.9.7 UnicodeMatchProperty (rer,p )
          8. 22.2.2.9.8 UnicodeMatchPropertyValue (p,v )
        10. 22.2.2.10 RS: CompileClassSetString
      3. +22.2.3 Abstract Operations for RegExp Creation
        1. 22.2.3.1 RegExpCreate (P,F )
        2. 22.2.3.2 RegExpAlloc (newTarget )
        3. 22.2.3.3 RegExpInitialize (obj,pattern,flags )
        4. 22.2.3.4 SS: ParsePattern (patternText,u,v )
      4. +22.2.4 The RegExp Constructor
        1. 22.2.4.1 RegExp (pattern,flags )
      5. +22.2.5 Properties of the RegExp Constructor
        1. +22.2.5.1 RegExp.escape (S )
          1. 22.2.5.1.1 EncodeForRegExpEscape (cp )
        2. 22.2.5.2 RegExp.prototype
        3. 22.2.5.3 get RegExp [ %Symbol.species% ]
      6. +22.2.6 Properties of the RegExp Prototype Object
        1. 22.2.6.1 RegExp.prototype.constructor
        2. 22.2.6.2 RegExp.prototype.exec (string )
        3. 22.2.6.3 get RegExp.prototype.dotAll
        4. +22.2.6.4 get RegExp.prototype.flags
          1. 22.2.6.4.1 RegExpHasFlag (R,codeUnit )
        5. 22.2.6.5 get RegExp.prototype.global
        6. 22.2.6.6 get RegExp.prototype.hasIndices
        7. 22.2.6.7 get RegExp.prototype.ignoreCase
        8. 22.2.6.8 RegExp.prototype [ %Symbol.match% ] (string )
        9. 22.2.6.9 RegExp.prototype [ %Symbol.matchAll% ] (string )
        10. 22.2.6.10 get RegExp.prototype.multiline
        11. 22.2.6.11 RegExp.prototype [ %Symbol.replace% ] (string,replaceValue )
        12. 22.2.6.12 RegExp.prototype [ %Symbol.search% ] (string )
        13. +22.2.6.13 get RegExp.prototype.source
          1. 22.2.6.13.1 EscapeRegExpPattern (P,F )
        14. 22.2.6.14 RegExp.prototype [ %Symbol.split% ] (string,limit )
        15. 22.2.6.15 get RegExp.prototype.sticky
        16. 22.2.6.16 RegExp.prototype.test (S )
        17. 22.2.6.17 RegExp.prototype.toString ( )
        18. 22.2.6.18 get RegExp.prototype.unicode
        19. 22.2.6.19 get RegExp.prototype.unicodeSets
      7. +22.2.7 Abstract Operations for RegExp Matching
        1. 22.2.7.1 RegExpExec (R,S )
        2. 22.2.7.2 RegExpBuiltinExec (R,S )
        3. 22.2.7.3 AdvanceStringIndex (S,index,unicode )
        4. 22.2.7.4 GetStringIndex (S,codePointIndex )
        5. 22.2.7.5 Match Records
        6. 22.2.7.6 GetMatchString (S,match )
        7. 22.2.7.7 GetMatchIndexPair (S,match )
        8. 22.2.7.8 MakeMatchIndicesIndexPairArray (S,indices,groupNames,hasGroups )
      8. +22.2.8 Properties of RegExp Instances
        1. 22.2.8.1 lastIndex
      9. +22.2.9 RegExp String Iterator Objects
        1. 22.2.9.1 CreateRegExpStringIterator (R,S,global,fullUnicode )
        2. +22.2.9.2 The %RegExpStringIteratorPrototype% Object
          1. 22.2.9.2.1 %RegExpStringIteratorPrototype%.next ( )
          2. 22.2.9.2.2 %RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]
        3. 22.2.9.3 Properties of RegExp String Iterator Instances
  24. +23 Indexed Collections
    1. +23.1 Array Objects
      1. +23.1.1 The Array Constructor
        1. 23.1.1.1 Array ( ...values )
      2. +23.1.2 Properties of the Array Constructor
        1. 23.1.2.1 Array.from (items [ ,mapper [ ,thisArg ] ] )
        2. 23.1.2.2 Array.isArray (arg )
        3. 23.1.2.3 Array.of ( ...items )
        4. 23.1.2.4 Array.prototype
        5. 23.1.2.5 get Array [ %Symbol.species% ]
      3. +23.1.3 Properties of the Array Prototype Object
        1. 23.1.3.1 Array.prototype.at (index )
        2. +23.1.3.2 Array.prototype.concat ( ...items )
          1. 23.1.3.2.1 IsConcatSpreadable (O )
        3. 23.1.3.3 Array.prototype.constructor
        4. 23.1.3.4 Array.prototype.copyWithin (target,start [ ,end ] )
        5. 23.1.3.5 Array.prototype.entries ( )
        6. 23.1.3.6 Array.prototype.every (callback [ ,thisArg ] )
        7. 23.1.3.7 Array.prototype.fill (value [ ,start [ ,end ] ] )
        8. 23.1.3.8 Array.prototype.filter (callback [ ,thisArg ] )
        9. 23.1.3.9 Array.prototype.find (predicate [ ,thisArg ] )
        10. 23.1.3.10 Array.prototype.findIndex (predicate [ ,thisArg ] )
        11. 23.1.3.11 Array.prototype.findLast (predicate [ ,thisArg ] )
        12. +23.1.3.12 Array.prototype.findLastIndex (predicate [ ,thisArg ] )
          1. 23.1.3.12.1 FindViaPredicate (O,len,direction,predicate,thisArg )
        13. +23.1.3.13 Array.prototype.flat ( [depth ] )
          1. 23.1.3.13.1 FlattenIntoArray (target,source,sourceLen,start,depth [ ,mapperFunction [ ,thisArg ] ] )
        14. 23.1.3.14 Array.prototype.flatMap (mapperFunction [ ,thisArg ] )
        15. 23.1.3.15 Array.prototype.forEach (callback [ ,thisArg ] )
        16. 23.1.3.16 Array.prototype.includes (searchElement [ ,fromIndex ] )
        17. 23.1.3.17 Array.prototype.indexOf (searchElement [ ,fromIndex ] )
        18. 23.1.3.18 Array.prototype.join (separator )
        19. 23.1.3.19 Array.prototype.keys ( )
        20. 23.1.3.20 Array.prototype.lastIndexOf (searchElement [ ,fromIndex ] )
        21. 23.1.3.21 Array.prototype.map (callback [ ,thisArg ] )
        22. 23.1.3.22 Array.prototype.pop ( )
        23. 23.1.3.23 Array.prototype.push ( ...items )
        24. 23.1.3.24 Array.prototype.reduce (callback [ ,initialValue ] )
        25. 23.1.3.25 Array.prototype.reduceRight (callback [ ,initialValue ] )
        26. 23.1.3.26 Array.prototype.reverse ( )
        27. 23.1.3.27 Array.prototype.shift ( )
        28. 23.1.3.28 Array.prototype.slice (start,end )
        29. 23.1.3.29 Array.prototype.some (callback [ ,thisArg ] )
        30. +23.1.3.30 Array.prototype.sort (comparator )
          1. 23.1.3.30.1 SortIndexedProperties (obj,len,SortCompare,holes )
          2. 23.1.3.30.2 CompareArrayElements (x,y,comparator )
        31. 23.1.3.31 Array.prototype.splice (start,deleteCount, ...items )
        32. 23.1.3.32 Array.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        33. 23.1.3.33 Array.prototype.toReversed ( )
        34. 23.1.3.34 Array.prototype.toSorted (comparator )
        35. 23.1.3.35 Array.prototype.toSpliced (start,skipCount, ...items )
        36. 23.1.3.36 Array.prototype.toString ( )
        37. 23.1.3.37 Array.prototype.unshift ( ...items )
        38. 23.1.3.38 Array.prototype.values ( )
        39. 23.1.3.39 Array.prototype.with (index,value )
        40. 23.1.3.40 Array.prototype [ %Symbol.iterator% ] ( )
        41. 23.1.3.41 Array.prototype [ %Symbol.unscopables% ]
      4. +23.1.4 Properties of Array Instances
        1. 23.1.4.1 length
      5. +23.1.5 Array Iterator Objects
        1. 23.1.5.1 CreateArrayIterator (array,kind )
        2. +23.1.5.2 The %ArrayIteratorPrototype% Object
          1. 23.1.5.2.1 %ArrayIteratorPrototype%.next ( )
          2. 23.1.5.2.2 %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]
        3. 23.1.5.3 Properties of Array Iterator Instances
    2. +23.2 TypedArray Objects
      1. +23.2.1 The %TypedArray% Intrinsic Object
        1. 23.2.1.1 %TypedArray% ( )
      2. +23.2.2 Properties of the %TypedArray% Intrinsic Object
        1. 23.2.2.1 %TypedArray%.from (source [ ,mapper [ ,thisArg ] ] )
        2. 23.2.2.2 %TypedArray%.of ( ...items )
        3. 23.2.2.3 %TypedArray%.prototype
        4. 23.2.2.4 get %TypedArray% [ %Symbol.species% ]
      3. +23.2.3 Properties of the %TypedArray% Prototype Object
        1. 23.2.3.1 %TypedArray%.prototype.at (index )
        2. 23.2.3.2 get %TypedArray%.prototype.buffer
        3. 23.2.3.3 get %TypedArray%.prototype.byteLength
        4. 23.2.3.4 get %TypedArray%.prototype.byteOffset
        5. 23.2.3.5 %TypedArray%.prototype.constructor
        6. 23.2.3.6 %TypedArray%.prototype.copyWithin (target,start [ ,end ] )
        7. 23.2.3.7 %TypedArray%.prototype.entries ( )
        8. 23.2.3.8 %TypedArray%.prototype.every (callback [ ,thisArg ] )
        9. 23.2.3.9 %TypedArray%.prototype.fill (value [ ,start [ ,end ] ] )
        10. 23.2.3.10 %TypedArray%.prototype.filter (callback [ ,thisArg ] )
        11. 23.2.3.11 %TypedArray%.prototype.find (predicate [ ,thisArg ] )
        12. 23.2.3.12 %TypedArray%.prototype.findIndex (predicate [ ,thisArg ] )
        13. 23.2.3.13 %TypedArray%.prototype.findLast (predicate [ ,thisArg ] )
        14. 23.2.3.14 %TypedArray%.prototype.findLastIndex (predicate [ ,thisArg ] )
        15. 23.2.3.15 %TypedArray%.prototype.forEach (callback [ ,thisArg ] )
        16. 23.2.3.16 %TypedArray%.prototype.includes (searchElement [ ,fromIndex ] )
        17. 23.2.3.17 %TypedArray%.prototype.indexOf (searchElement [ ,fromIndex ] )
        18. 23.2.3.18 %TypedArray%.prototype.join (separator )
        19. 23.2.3.19 %TypedArray%.prototype.keys ( )
        20. 23.2.3.20 %TypedArray%.prototype.lastIndexOf (searchElement [ ,fromIndex ] )
        21. 23.2.3.21 get %TypedArray%.prototype.length
        22. 23.2.3.22 %TypedArray%.prototype.map (callback [ ,thisArg ] )
        23. 23.2.3.23 %TypedArray%.prototype.reduce (callback [ ,initialValue ] )
        24. 23.2.3.24 %TypedArray%.prototype.reduceRight (callback [ ,initialValue ] )
        25. 23.2.3.25 %TypedArray%.prototype.reverse ( )
        26. +23.2.3.26 %TypedArray%.prototype.set (source [ ,offset ] )
          1. 23.2.3.26.1 SetTypedArrayFromArrayLike (target,targetOffset,source )
          2. 23.2.3.26.2 SetTypedArrayFromTypedArray (target,targetOffset,source )
        27. 23.2.3.27 %TypedArray%.prototype.slice (start,end )
        28. 23.2.3.28 %TypedArray%.prototype.some (callback [ ,thisArg ] )
        29. 23.2.3.29 %TypedArray%.prototype.sort (comparator )
        30. 23.2.3.30 %TypedArray%.prototype.subarray (start,end )
        31. 23.2.3.31 %TypedArray%.prototype.toLocaleString ( [reserved1 [ ,reserved2 ] ] )
        32. 23.2.3.32 %TypedArray%.prototype.toReversed ( )
        33. 23.2.3.33 %TypedArray%.prototype.toSorted (comparator )
        34. 23.2.3.34 %TypedArray%.prototype.toString ( )
        35. 23.2.3.35 %TypedArray%.prototype.values ( )
        36. 23.2.3.36 %TypedArray%.prototype.with (index,value )
        37. 23.2.3.37 %TypedArray%.prototype [ %Symbol.iterator% ] ( )
        38. 23.2.3.38 get %TypedArray%.prototype [ %Symbol.toStringTag% ]
      4. +23.2.4 Abstract Operations for TypedArray Objects
        1. 23.2.4.1 TypedArrayCreateFromConstructor (constructor,argumentList )
        2. 23.2.4.2 TypedArrayCreateSameType (exemplar,length )
        3. 23.2.4.3 TypedArraySpeciesCreate (exemplar,argumentList )
        4. 23.2.4.4 ValidateTypedArray (O,order )
        5. 23.2.4.5 TypedArrayElementSize (O )
        6. 23.2.4.6 TypedArrayElementType (O )
        7. 23.2.4.7 CompareTypedArrayElements (x,y,comparator )
      5. +23.2.5 TheTypedArray Constructors
        1. +23.2.5.1TypedArray ( ...args )
          1. 23.2.5.1.1 AllocateTypedArray (constructorName,newTarget,defaultProto [ ,length ] )
          2. 23.2.5.1.2 InitializeTypedArrayFromTypedArray (O,srcArray )
          3. 23.2.5.1.3 InitializeTypedArrayFromArrayBuffer (O,buffer,byteOffset,length )
          4. 23.2.5.1.4 InitializeTypedArrayFromList (O,values )
          5. 23.2.5.1.5 InitializeTypedArrayFromArrayLike (O,arrayLike )
          6. 23.2.5.1.6 AllocateTypedArrayBuffer (O,length )
      6. +23.2.6 Properties of theTypedArray Constructors
        1. 23.2.6.1TypedArray.BYTES_PER_ELEMENT
        2. 23.2.6.2TypedArray.prototype
      7. +23.2.7 Properties of theTypedArray Prototype Objects
        1. 23.2.7.1TypedArray.prototype.BYTES_PER_ELEMENT
        2. 23.2.7.2TypedArray.prototype.constructor
      8. 23.2.8 Properties ofTypedArray Instances
    3. +23.3 Uint8Array Objects
      1. +23.3.1 Additional Properties of the Uint8Array Constructor
        1. 23.3.1.1 Uint8Array.fromBase64 (string [ ,options ] )
        2. 23.3.1.2 Uint8Array.fromHex (string )
      2. +23.3.2 Additional Properties of the Uint8Array Prototype Object
        1. 23.3.2.1 Uint8Array.prototype.setFromBase64 (string [ ,options ] )
        2. 23.3.2.2 Uint8Array.prototype.setFromHex (string )
        3. 23.3.2.3 Uint8Array.prototype.toBase64 ( [options ] )
        4. 23.3.2.4 Uint8Array.prototype.toHex ( )
      3. +23.3.3 Abstract Operations for Uint8Array Objects
        1. 23.3.3.1 ValidateUint8Array (ta )
        2. 23.3.3.2 GetUint8ArrayBytes (ta )
        3. 23.3.3.3 SetUint8ArrayBytes (into,bytes )
        4. 23.3.3.4 SkipAsciiWhitespace (string,index )
        5. 23.3.3.5 DecodeFinalBase64Chunk (chunk,throwOnExtraBits )
        6. 23.3.3.6 DecodeFullLengthBase64Chunk (chunk )
        7. 23.3.3.7 FromBase64 (string,alphabet,lastChunkHandling [ ,maxLength ] )
        8. 23.3.3.8 FromHex (string [ ,maxLength ] )
  25. +24 Keyed Collections
    1. +24.1 Map Objects
      1. +24.1.1 The Map Constructor
        1. 24.1.1.1 Map ( [iterable ] )
        2. 24.1.1.2 AddEntriesFromIterable (target,iterable,adder )
      2. +24.1.2 Properties of the Map Constructor
        1. 24.1.2.1 Map.groupBy (items,callback )
        2. 24.1.2.2 Map.prototype
        3. 24.1.2.3 get Map [ %Symbol.species% ]
      3. +24.1.3 Properties of the Map Prototype Object
        1. 24.1.3.1 Map.prototype.clear ( )
        2. 24.1.3.2 Map.prototype.constructor
        3. 24.1.3.3 Map.prototype.delete (key )
        4. 24.1.3.4 Map.prototype.entries ( )
        5. 24.1.3.5 Map.prototype.forEach (callback [ ,thisArg ] )
        6. 24.1.3.6 Map.prototype.get (key )
        7. 24.1.3.7 Map.prototype.has (key )
        8. 24.1.3.8 Map.prototype.keys ( )
        9. 24.1.3.9 Map.prototype.set (key,value )
        10. 24.1.3.10 get Map.prototype.size
        11. 24.1.3.11 Map.prototype.values ( )
        12. 24.1.3.12 Map.prototype [ %Symbol.iterator% ] ( )
        13. 24.1.3.13 Map.prototype [ %Symbol.toStringTag% ]
      4. 24.1.4 Properties of Map Instances
      5. +24.1.5 Map Iterator Objects
        1. 24.1.5.1 CreateMapIterator (map,kind )
        2. +24.1.5.2 The %MapIteratorPrototype% Object
          1. 24.1.5.2.1 %MapIteratorPrototype%.next ( )
          2. 24.1.5.2.2 %MapIteratorPrototype% [ %Symbol.toStringTag% ]
    2. +24.2 Set Objects
      1. +24.2.1 Abstract Operations For Set Objects
        1. 24.2.1.1 Set Records
        2. 24.2.1.2 GetSetRecord (obj )
        3. 24.2.1.3 SetDataHas (setData,value )
        4. 24.2.1.4 SetDataIndex (setData,value )
        5. 24.2.1.5 SetDataSize (setData )
      2. +24.2.2 The Set Constructor
        1. 24.2.2.1 Set ( [iterable ] )
      3. +24.2.3 Properties of the Set Constructor
        1. 24.2.3.1 Set.prototype
        2. 24.2.3.2 get Set [ %Symbol.species% ]
      4. +24.2.4 Properties of the Set Prototype Object
        1. 24.2.4.1 Set.prototype.add (value )
        2. 24.2.4.2 Set.prototype.clear ( )
        3. 24.2.4.3 Set.prototype.constructor
        4. 24.2.4.4 Set.prototype.delete (value )
        5. 24.2.4.5 Set.prototype.difference (other )
        6. 24.2.4.6 Set.prototype.entries ( )
        7. 24.2.4.7 Set.prototype.forEach (callback [ ,thisArg ] )
        8. 24.2.4.8 Set.prototype.has (value )
        9. 24.2.4.9 Set.prototype.intersection (other )
        10. 24.2.4.10 Set.prototype.isDisjointFrom (other )
        11. 24.2.4.11 Set.prototype.isSubsetOf (other )
        12. 24.2.4.12 Set.prototype.isSupersetOf (other )
        13. 24.2.4.13 Set.prototype.keys ( )
        14. 24.2.4.14 get Set.prototype.size
        15. 24.2.4.15 Set.prototype.symmetricDifference (other )
        16. 24.2.4.16 Set.prototype.union (other )
        17. 24.2.4.17 Set.prototype.values ( )
        18. 24.2.4.18 Set.prototype [ %Symbol.iterator% ] ( )
        19. 24.2.4.19 Set.prototype [ %Symbol.toStringTag% ]
      5. 24.2.5 Properties of Set Instances
      6. +24.2.6 Set Iterator Objects
        1. 24.2.6.1 CreateSetIterator (set,kind )
        2. +24.2.6.2 The %SetIteratorPrototype% Object
          1. 24.2.6.2.1 %SetIteratorPrototype%.next ( )
          2. 24.2.6.2.2 %SetIteratorPrototype% [ %Symbol.toStringTag% ]
    3. +24.3 WeakMap Objects
      1. +24.3.1 The WeakMap Constructor
        1. 24.3.1.1 WeakMap ( [iterable ] )
      2. +24.3.2 Properties of the WeakMap Constructor
        1. 24.3.2.1 WeakMap.prototype
      3. +24.3.3 Properties of the WeakMap Prototype Object
        1. 24.3.3.1 WeakMap.prototype.constructor
        2. 24.3.3.2 WeakMap.prototype.delete (key )
        3. 24.3.3.3 WeakMap.prototype.get (key )
        4. 24.3.3.4 WeakMap.prototype.has (key )
        5. 24.3.3.5 WeakMap.prototype.set (key,value )
        6. 24.3.3.6 WeakMap.prototype [ %Symbol.toStringTag% ]
      4. 24.3.4 Properties of WeakMap Instances
    4. +24.4 WeakSet Objects
      1. +24.4.1 The WeakSet Constructor
        1. 24.4.1.1 WeakSet ( [iterable ] )
      2. +24.4.2 Properties of the WeakSet Constructor
        1. 24.4.2.1 WeakSet.prototype
      3. +24.4.3 Properties of the WeakSet Prototype Object
        1. 24.4.3.1 WeakSet.prototype.add (value )
        2. 24.4.3.2 WeakSet.prototype.constructor
        3. 24.4.3.3 WeakSet.prototype.delete (value )
        4. 24.4.3.4 WeakSet.prototype.has (value )
        5. 24.4.3.5 WeakSet.prototype [ %Symbol.toStringTag% ]
      4. 24.4.4 Properties of WeakSet Instances
    5. +24.5 Abstract Operations for Keyed Collections
      1. 24.5.1 CanonicalizeKeyedCollectionKey (key )
  26. +25 Structured Data
    1. +25.1 ArrayBuffer Objects
      1. 25.1.1 Notation
      2. 25.1.2 Fixed-length and Resizable ArrayBuffer Objects
      3. +25.1.3 Abstract Operations For ArrayBuffer Objects
        1. 25.1.3.1 AllocateArrayBuffer (constructor,byteLength [ ,maxByteLength ] )
        2. 25.1.3.2 ArrayBufferByteLength (arrayBuffer,order )
        3. 25.1.3.3 ArrayBufferCopyAndDetach (arrayBuffer,newLength,preserveResizability )
        4. 25.1.3.4 IsDetachedBuffer (arrayBuffer )
        5. 25.1.3.5 DetachArrayBuffer (arrayBuffer [ ,key ] )
        6. 25.1.3.6 CloneArrayBuffer (srcBuffer,srcByteOffset,srcLength )
        7. 25.1.3.7 GetArrayBufferMaxByteLengthOption (options )
        8. 25.1.3.8 HostResizeArrayBuffer (buffer,newByteLength )
        9. 25.1.3.9 IsFixedLengthArrayBuffer (arrayBuffer )
        10. 25.1.3.10 IsUnsignedElementType (type )
        11. 25.1.3.11 IsUnclampedIntegerElementType (type )
        12. 25.1.3.12 IsBigIntElementType (type )
        13. 25.1.3.13 IsNoTearConfiguration (type,order )
        14. 25.1.3.14 RawBytesToNumeric (type,rawBytes,isLittleEndian )
        15. 25.1.3.15 GetRawBytesFromSharedBlock (block,byteIndex,type,isTypedArray,order )
        16. 25.1.3.16 GetValueFromBuffer (arrayBuffer,byteIndex,type,isTypedArray,order [ ,isLittleEndian ] )
        17. 25.1.3.17 NumericToRawBytes (type,value,isLittleEndian )
        18. 25.1.3.18 SetValueInBuffer (arrayBuffer,byteIndex,type,value,isTypedArray,order [ ,isLittleEndian ] )
        19. 25.1.3.19 GetModifySetValueInBuffer (arrayBuffer,byteIndex,type,value,op )
      4. +25.1.4 The ArrayBuffer Constructor
        1. 25.1.4.1 ArrayBuffer (length [ ,options ] )
      5. +25.1.5 Properties of the ArrayBuffer Constructor
        1. 25.1.5.1 ArrayBuffer.isView (arg )
        2. 25.1.5.2 ArrayBuffer.prototype
        3. 25.1.5.3 get ArrayBuffer [ %Symbol.species% ]
      6. +25.1.6 Properties of the ArrayBuffer Prototype Object
        1. 25.1.6.1 get ArrayBuffer.prototype.byteLength
        2. 25.1.6.2 ArrayBuffer.prototype.constructor
        3. 25.1.6.3 get ArrayBuffer.prototype.detached
        4. 25.1.6.4 get ArrayBuffer.prototype.maxByteLength
        5. 25.1.6.5 get ArrayBuffer.prototype.resizable
        6. 25.1.6.6 ArrayBuffer.prototype.resize (newLength )
        7. 25.1.6.7 ArrayBuffer.prototype.slice (start,end )
        8. 25.1.6.8 ArrayBuffer.prototype.transfer ( [newLength ] )
        9. 25.1.6.9 ArrayBuffer.prototype.transferToFixedLength ( [newLength ] )
        10. 25.1.6.10 ArrayBuffer.prototype [ %Symbol.toStringTag% ]
      7. 25.1.7 Properties of ArrayBuffer Instances
      8. 25.1.8 Resizable ArrayBuffer Guidelines
    2. +25.2 SharedArrayBuffer Objects
      1. 25.2.1 Fixed-length and Growable SharedArrayBuffer Objects
      2. +25.2.2 Abstract Operations for SharedArrayBuffer Objects
        1. 25.2.2.1 AllocateSharedArrayBuffer (constructor,byteLength [ ,maxByteLength ] )
        2. 25.2.2.2 IsSharedArrayBuffer (obj )
        3. 25.2.2.3 HostGrowSharedArrayBuffer (buffer,newByteLength )
      3. +25.2.3 The SharedArrayBuffer Constructor
        1. 25.2.3.1 SharedArrayBuffer (length [ ,options ] )
      4. +25.2.4 Properties of the SharedArrayBuffer Constructor
        1. 25.2.4.1 SharedArrayBuffer.prototype
        2. 25.2.4.2 get SharedArrayBuffer [ %Symbol.species% ]
      5. +25.2.5 Properties of the SharedArrayBuffer Prototype Object
        1. 25.2.5.1 get SharedArrayBuffer.prototype.byteLength
        2. 25.2.5.2 SharedArrayBuffer.prototype.constructor
        3. 25.2.5.3 SharedArrayBuffer.prototype.grow (newLength )
        4. 25.2.5.4 get SharedArrayBuffer.prototype.growable
        5. 25.2.5.5 get SharedArrayBuffer.prototype.maxByteLength
        6. 25.2.5.6 SharedArrayBuffer.prototype.slice (start,end )
        7. 25.2.5.7 SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]
      6. 25.2.6 Properties of SharedArrayBuffer Instances
      7. 25.2.7 Growable SharedArrayBuffer Guidelines
    3. +25.3 DataView Objects
      1. +25.3.1 Abstract Operations For DataView Objects
        1. 25.3.1.1 DataView With Buffer Witness Records
        2. 25.3.1.2 MakeDataViewWithBufferWitnessRecord (obj,order )
        3. 25.3.1.3 GetViewByteLength (viewRecord )
        4. 25.3.1.4 IsViewOutOfBounds (viewRecord )
        5. 25.3.1.5 GetViewValue (view,requestIndex,isLittleEndian,type )
        6. 25.3.1.6 SetViewValue (view,requestIndex,isLittleEndian,type,value )
      2. +25.3.2 The DataView Constructor
        1. 25.3.2.1 DataView (buffer [ ,byteOffset [ ,byteLength ] ] )
      3. +25.3.3 Properties of the DataView Constructor
        1. 25.3.3.1 DataView.prototype
      4. +25.3.4 Properties of the DataView Prototype Object
        1. 25.3.4.1 get DataView.prototype.buffer
        2. 25.3.4.2 get DataView.prototype.byteLength
        3. 25.3.4.3 get DataView.prototype.byteOffset
        4. 25.3.4.4 DataView.prototype.constructor
        5. 25.3.4.5 DataView.prototype.getBigInt64 (byteOffset [ ,littleEndian ] )
        6. 25.3.4.6 DataView.prototype.getBigUint64 (byteOffset [ ,littleEndian ] )
        7. 25.3.4.7 DataView.prototype.getFloat16 (byteOffset [ ,littleEndian ] )
        8. 25.3.4.8 DataView.prototype.getFloat32 (byteOffset [ ,littleEndian ] )
        9. 25.3.4.9 DataView.prototype.getFloat64 (byteOffset [ ,littleEndian ] )
        10. 25.3.4.10 DataView.prototype.getInt8 (byteOffset )
        11. 25.3.4.11 DataView.prototype.getInt16 (byteOffset [ ,littleEndian ] )
        12. 25.3.4.12 DataView.prototype.getInt32 (byteOffset [ ,littleEndian ] )
        13. 25.3.4.13 DataView.prototype.getUint8 (byteOffset )
        14. 25.3.4.14 DataView.prototype.getUint16 (byteOffset [ ,littleEndian ] )
        15. 25.3.4.15 DataView.prototype.getUint32 (byteOffset [ ,littleEndian ] )
        16. 25.3.4.16 DataView.prototype.setBigInt64 (byteOffset,value [ ,littleEndian ] )
        17. 25.3.4.17 DataView.prototype.setBigUint64 (byteOffset,value [ ,littleEndian ] )
        18. 25.3.4.18 DataView.prototype.setFloat16 (byteOffset,value [ ,littleEndian ] )
        19. 25.3.4.19 DataView.prototype.setFloat32 (byteOffset,value [ ,littleEndian ] )
        20. 25.3.4.20 DataView.prototype.setFloat64 (byteOffset,value [ ,littleEndian ] )
        21. 25.3.4.21 DataView.prototype.setInt8 (byteOffset,value )
        22. 25.3.4.22 DataView.prototype.setInt16 (byteOffset,value [ ,littleEndian ] )
        23. 25.3.4.23 DataView.prototype.setInt32 (byteOffset,value [ ,littleEndian ] )
        24. 25.3.4.24 DataView.prototype.setUint8 (byteOffset,value )
        25. 25.3.4.25 DataView.prototype.setUint16 (byteOffset,value [ ,littleEndian ] )
        26. 25.3.4.26 DataView.prototype.setUint32 (byteOffset,value [ ,littleEndian ] )
        27. 25.3.4.27 DataView.prototype [ %Symbol.toStringTag% ]
      5. 25.3.5 Properties of DataView Instances
    4. +25.4 The Atomics Object
      1. 25.4.1 Waiter Record
      2. 25.4.2 WaiterList Records
      3. +25.4.3 Abstract Operations for Atomics
        1. 25.4.3.1 ValidateIntegerTypedArray (typedArray,waitable )
        2. 25.4.3.2 ValidateAtomicAccess (taRecord,requestIndex )
        3. 25.4.3.3 ValidateAtomicAccessOnIntegerTypedArray (typedArray,requestIndex )
        4. 25.4.3.4 RevalidateAtomicAccess (typedArray,byteIndexInBuffer )
        5. 25.4.3.5 GetWaiterList (block,i )
        6. 25.4.3.6 EnterCriticalSection (WL )
        7. 25.4.3.7 LeaveCriticalSection (WL )
        8. 25.4.3.8 AddWaiter (WL,waiterRecord )
        9. 25.4.3.9 RemoveWaiter (WL,waiterRecord )
        10. 25.4.3.10 RemoveWaiters (WL,c )
        11. 25.4.3.11 SuspendThisAgent (WL,waiterRecord )
        12. 25.4.3.12 NotifyWaiter (WL,waiterRecord )
        13. 25.4.3.13 EnqueueResolveInAgentJob (agentSignifier,promiseCapability,resolution )
        14. 25.4.3.14 DoWait (mode,typedArray,index,value,timeout )
        15. 25.4.3.15 EnqueueAtomicsWaitAsyncTimeoutJob (WL,waiterRecord )
        16. 25.4.3.16 AtomicCompareExchangeInSharedBlock (block,byteIndexInBuffer,elementSize,expectedBytes,replacementBytes )
        17. 25.4.3.17 AtomicReadModifyWrite (typedArray,index,value,op )
        18. 25.4.3.18 ByteListBitwiseOp (op,xBytes,yBytes )
        19. 25.4.3.19 ByteListEqual (xBytes,yBytes )
      4. 25.4.4 Atomics.add (typedArray,index,value )
      5. 25.4.5 Atomics.and (typedArray,index,value )
      6. 25.4.6 Atomics.compareExchange (typedArray,index,expectedValue,replacementValue )
      7. 25.4.7 Atomics.exchange (typedArray,index,value )
      8. 25.4.8 Atomics.isLockFree (size )
      9. 25.4.9 Atomics.load (typedArray,index )
      10. 25.4.10 Atomics.or (typedArray,index,value )
      11. 25.4.11 Atomics.store (typedArray,index,value )
      12. 25.4.12 Atomics.sub (typedArray,index,value )
      13. 25.4.13 Atomics.wait (typedArray,index,value,timeout )
      14. 25.4.14 Atomics.waitAsync (typedArray,index,value,timeout )
      15. 25.4.15 Atomics.notify (typedArray,index,count )
      16. 25.4.16 Atomics.xor (typedArray,index,value )
      17. 25.4.17 Atomics [ %Symbol.toStringTag% ]
    5. +25.5 The JSON Object
      1. +25.5.1 JSON.parse (text [ ,reviver ] )
        1. 25.5.1.1 ParseJSON (text )
        2. 25.5.1.2 InternalizeJSONProperty (holder,name,reviver )
      2. +25.5.2 JSON.stringify (value [ ,replacer [ ,space ] ] )
        1. 25.5.2.1 JSON Serialization Record
        2. 25.5.2.2 SerializeJSONProperty (state,key,holder )
        3. 25.5.2.3 QuoteJSONString (value )
        4. 25.5.2.4 UnicodeEscape (C )
        5. 25.5.2.5 SerializeJSONObject (state,value )
        6. 25.5.2.6 SerializeJSONArray (state,value )
      3. 25.5.3 JSON [ %Symbol.toStringTag% ]
  27. +26 Managing Memory
    1. +26.1 WeakRef Objects
      1. +26.1.1 The WeakRef Constructor
        1. 26.1.1.1 WeakRef (target )
      2. +26.1.2 Properties of the WeakRef Constructor
        1. 26.1.2.1 WeakRef.prototype
      3. +26.1.3 Properties of the WeakRef Prototype Object
        1. 26.1.3.1 WeakRef.prototype.constructor
        2. 26.1.3.2 WeakRef.prototype.deref ( )
        3. 26.1.3.3 WeakRef.prototype [ %Symbol.toStringTag% ]
      4. +26.1.4 WeakRef Abstract Operations
        1. 26.1.4.1 WeakRefDeref (weakRef )
      5. 26.1.5 Properties of WeakRef Instances
    2. +26.2 FinalizationRegistry Objects
      1. +26.2.1 The FinalizationRegistry Constructor
        1. 26.2.1.1 FinalizationRegistry (cleanupCallback )
      2. +26.2.2 Properties of the FinalizationRegistry Constructor
        1. 26.2.2.1 FinalizationRegistry.prototype
      3. +26.2.3 Properties of the FinalizationRegistry Prototype Object
        1. 26.2.3.1 FinalizationRegistry.prototype.constructor
        2. 26.2.3.2 FinalizationRegistry.prototype.register (target,heldValue [ ,unregisterToken ] )
        3. 26.2.3.3 FinalizationRegistry.prototype.unregister (unregisterToken )
        4. 26.2.3.4 FinalizationRegistry.prototype [ %Symbol.toStringTag% ]
      4. 26.2.4 Properties of FinalizationRegistry Instances
  28. +27 Control Abstraction Objects
    1. +27.1 Iteration
      1. +27.1.1 Common Iteration Interfaces
        1. 27.1.1.1 The Iterable Interface
        2. 27.1.1.2 The Iterator Interface
        3. 27.1.1.3 The Async Iterable Interface
        4. 27.1.1.4 The Async Iterator Interface
        5. 27.1.1.5 The IteratorResult Interface
      2. +27.1.2 Iterator Helper Objects
        1. +27.1.2.1 The %IteratorHelperPrototype% Object
          1. 27.1.2.1.1 %IteratorHelperPrototype%.next ( )
          2. 27.1.2.1.2 %IteratorHelperPrototype%.return ( )
          3. 27.1.2.1.3 %IteratorHelperPrototype% [ %Symbol.toStringTag% ]
      3. +27.1.3 Iterator Objects
        1. +27.1.3.1 The Iterator Constructor
          1. 27.1.3.1.1 Iterator ( )
        2. +27.1.3.2 Properties of the Iterator Constructor
          1. +27.1.3.2.1 Iterator.from (O )
            1. +27.1.3.2.1.1 The %WrapForValidIteratorPrototype% Object
              1. 27.1.3.2.1.1.1 %WrapForValidIteratorPrototype%.next ( )
              2. 27.1.3.2.1.1.2 %WrapForValidIteratorPrototype%.return ( )
          2. 27.1.3.2.2 Iterator.prototype
        3. +27.1.3.3 Properties of the Iterator Prototype Object
          1. +27.1.3.3.1 Iterator.prototype.constructor
            1. 27.1.3.3.1.1 get Iterator.prototype.constructor
            2. 27.1.3.3.1.2 set Iterator.prototype.constructor
          2. 27.1.3.3.2 Iterator.prototype.drop (limit )
          3. 27.1.3.3.3 Iterator.prototype.every (predicate )
          4. 27.1.3.3.4 Iterator.prototype.filter (predicate )
          5. 27.1.3.3.5 Iterator.prototype.find (predicate )
          6. 27.1.3.3.6 Iterator.prototype.flatMap (mapper )
          7. 27.1.3.3.7 Iterator.prototype.forEach (procedure )
          8. 27.1.3.3.8 Iterator.prototype.map (mapper )
          9. 27.1.3.3.9 Iterator.prototype.reduce (reducer [ ,initialValue ] )
          10. 27.1.3.3.10 Iterator.prototype.some (predicate )
          11. 27.1.3.3.11 Iterator.prototype.take (limit )
          12. 27.1.3.3.12 Iterator.prototype.toArray ( )
          13. 27.1.3.3.13 Iterator.prototype [ %Symbol.iterator% ] ( )
          14. +27.1.3.3.14 Iterator.prototype [ %Symbol.toStringTag% ]
            1. 27.1.3.3.14.1 get Iterator.prototype [ %Symbol.toStringTag% ]
            2. 27.1.3.3.14.2 set Iterator.prototype [ %Symbol.toStringTag% ]
      4. +27.1.4 The %AsyncIteratorPrototype% Object
        1. 27.1.4.1 %AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )
      5. +27.1.5 Async-from-Sync Iterator Objects
        1. 27.1.5.1 CreateAsyncFromSyncIterator (syncIteratorRecord )
        2. +27.1.5.2 The %AsyncFromSyncIteratorPrototype% Object
          1. 27.1.5.2.1 %AsyncFromSyncIteratorPrototype%.next ( [value ] )
          2. 27.1.5.2.2 %AsyncFromSyncIteratorPrototype%.return ( [value ] )
          3. 27.1.5.2.3 %AsyncFromSyncIteratorPrototype%.throw ( [value ] )
        3. 27.1.5.3 Properties of Async-from-Sync Iterator Instances
        4. 27.1.5.4 AsyncFromSyncIteratorContinuation (result,promiseCapability,syncIteratorRecord,closeOnRejection )
    2. +27.2 Promise Objects
      1. +27.2.1 Promise Abstract Operations
        1. +27.2.1.1 PromiseCapability Records
          1. 27.2.1.1.1 IfAbruptRejectPromise (value,capability )
        2. 27.2.1.2 PromiseReaction Records
        3. +27.2.1.3 CreateResolvingFunctions (promise )
          1. 27.2.1.3.1 Promise Reject Functions
          2. 27.2.1.3.2 Promise Resolve Functions
        4. 27.2.1.4 FulfillPromise (promise,value )
        5. 27.2.1.5 NewPromiseCapability (C )
        6. 27.2.1.6 IsPromise (x )
        7. 27.2.1.7 RejectPromise (promise,reason )
        8. 27.2.1.8 TriggerPromiseReactions (reactions,argument )
        9. 27.2.1.9 HostPromiseRejectionTracker (promise,operation )
      2. +27.2.2 Promise Jobs
        1. 27.2.2.1 NewPromiseReactionJob (reaction,argument )
        2. 27.2.2.2 NewPromiseResolveThenableJob (promiseToResolve,thenable,then )
      3. +27.2.3 The Promise Constructor
        1. 27.2.3.1 Promise (executor )
      4. +27.2.4 Properties of the Promise Constructor
        1. +27.2.4.1 Promise.all (iterable )
          1. 27.2.4.1.1 GetPromiseResolve (promiseConstructor )
          2. 27.2.4.1.2 PerformPromiseAll (iteratorRecord,constructor,resultCapability,promiseResolve )
          3. 27.2.4.1.3Promise.all Resolve Element Functions
        2. +27.2.4.2 Promise.allSettled (iterable )
          1. 27.2.4.2.1 PerformPromiseAllSettled (iteratorRecord,constructor,resultCapability,promiseResolve )
          2. 27.2.4.2.2Promise.allSettled Resolve Element Functions
          3. 27.2.4.2.3Promise.allSettled Reject Element Functions
        3. +27.2.4.3 Promise.any (iterable )
          1. 27.2.4.3.1 PerformPromiseAny (iteratorRecord,constructor,resultCapability,promiseResolve )
          2. 27.2.4.3.2Promise.any Reject Element Functions
        4. 27.2.4.4 Promise.prototype
        5. +27.2.4.5 Promise.race (iterable )
          1. 27.2.4.5.1 PerformPromiseRace (iteratorRecord,constructor,resultCapability,promiseResolve )
        6. 27.2.4.6 Promise.reject (r )
        7. +27.2.4.7 Promise.resolve (x )
          1. 27.2.4.7.1 PromiseResolve (C,x )
        8. 27.2.4.8 Promise.try (callback, ...args )
        9. 27.2.4.9 Promise.withResolvers ( )
        10. 27.2.4.10 get Promise [ %Symbol.species% ]
      5. +27.2.5 Properties of the Promise Prototype Object
        1. 27.2.5.1 Promise.prototype.catch (onRejected )
        2. 27.2.5.2 Promise.prototype.constructor
        3. 27.2.5.3 Promise.prototype.finally (onFinally )
        4. +27.2.5.4 Promise.prototype.then (onFulfilled,onRejected )
          1. 27.2.5.4.1 PerformPromiseThen (promise,onFulfilled,onRejected [ ,resultCapability ] )
        5. 27.2.5.5 Promise.prototype [ %Symbol.toStringTag% ]
      6. 27.2.6 Properties of Promise Instances
    3. +27.3 GeneratorFunction Objects
      1. +27.3.1 The GeneratorFunction Constructor
        1. 27.3.1.1 GeneratorFunction ( ...parameterArgs,bodyArg )
      2. +27.3.2 Properties of the GeneratorFunction Constructor
        1. 27.3.2.1 GeneratorFunction.prototype
      3. +27.3.3 Properties of the GeneratorFunction Prototype Object
        1. 27.3.3.1 GeneratorFunction.prototype.constructor
        2. 27.3.3.2 GeneratorFunction.prototype.prototype
        3. 27.3.3.3 GeneratorFunction.prototype [ %Symbol.toStringTag% ]
      4. +27.3.4 GeneratorFunction Instances
        1. 27.3.4.1 length
        2. 27.3.4.2 name
        3. 27.3.4.3 prototype
    4. +27.4 AsyncGeneratorFunction Objects
      1. +27.4.1 The AsyncGeneratorFunction Constructor
        1. 27.4.1.1 AsyncGeneratorFunction ( ...parameterArgs,bodyArg )
      2. +27.4.2 Properties of the AsyncGeneratorFunction Constructor
        1. 27.4.2.1 AsyncGeneratorFunction.prototype
      3. +27.4.3 Properties of the AsyncGeneratorFunction Prototype Object
        1. 27.4.3.1 AsyncGeneratorFunction.prototype.constructor
        2. 27.4.3.2 AsyncGeneratorFunction.prototype.prototype
        3. 27.4.3.3 AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]
      4. +27.4.4 AsyncGeneratorFunction Instances
        1. 27.4.4.1 length
        2. 27.4.4.2 name
        3. 27.4.4.3 prototype
    5. +27.5 Generator Objects
      1. +27.5.1 The %GeneratorPrototype% Object
        1. 27.5.1.1 %GeneratorPrototype%.constructor
        2. 27.5.1.2 %GeneratorPrototype%.next (value )
        3. 27.5.1.3 %GeneratorPrototype%.return (value )
        4. 27.5.1.4 %GeneratorPrototype%.throw (exception )
        5. 27.5.1.5 %GeneratorPrototype% [ %Symbol.toStringTag% ]
      2. 27.5.2 Properties of Generator Instances
      3. +27.5.3 Generator Abstract Operations
        1. 27.5.3.1 GeneratorStart (generator,generatorBody )
        2. 27.5.3.2 GeneratorValidate (generator,generatorBrand )
        3. 27.5.3.3 GeneratorResume (generator,value,generatorBrand )
        4. 27.5.3.4 GeneratorResumeAbrupt (generator,abruptCompletion,generatorBrand )
        5. 27.5.3.5 GetGeneratorKind ( )
        6. 27.5.3.6 GeneratorYield (iteratorResult )
        7. 27.5.3.7 Yield (value )
        8. 27.5.3.8 CreateIteratorFromClosure (closure,generatorBrand,generatorPrototype [ ,extraSlots ] )
    6. +27.6 AsyncGenerator Objects
      1. +27.6.1 The %AsyncGeneratorPrototype% Object
        1. 27.6.1.1 %AsyncGeneratorPrototype%.constructor
        2. 27.6.1.2 %AsyncGeneratorPrototype%.next (value )
        3. 27.6.1.3 %AsyncGeneratorPrototype%.return (value )
        4. 27.6.1.4 %AsyncGeneratorPrototype%.throw (exception )
        5. 27.6.1.5 %AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]
      2. 27.6.2 Properties of AsyncGenerator Instances
      3. +27.6.3 AsyncGenerator Abstract Operations
        1. 27.6.3.1 AsyncGeneratorRequest Records
        2. 27.6.3.2 AsyncGeneratorStart (generator,generatorBody )
        3. 27.6.3.3 AsyncGeneratorValidate (generator,generatorBrand )
        4. 27.6.3.4 AsyncGeneratorEnqueue (generator,completion,promiseCapability )
        5. 27.6.3.5 AsyncGeneratorCompleteStep (generator,completion,done [ ,realm ] )
        6. 27.6.3.6 AsyncGeneratorResume (generator,completion )
        7. 27.6.3.7 AsyncGeneratorUnwrapYieldResumption (resumptionValue )
        8. 27.6.3.8 AsyncGeneratorYield (value )
        9. 27.6.3.9 AsyncGeneratorAwaitReturn (generator )
        10. 27.6.3.10 AsyncGeneratorDrainQueue (generator )
        11. 27.6.3.11 CreateAsyncIteratorFromClosure (closure,generatorBrand,generatorPrototype )
    7. +27.7 AsyncFunction Objects
      1. +27.7.1 The AsyncFunction Constructor
        1. 27.7.1.1 AsyncFunction ( ...parameterArgs,bodyArg )
      2. +27.7.2 Properties of the AsyncFunction Constructor
        1. 27.7.2.1 AsyncFunction.prototype
      3. +27.7.3 Properties of the AsyncFunction Prototype Object
        1. 27.7.3.1 AsyncFunction.prototype.constructor
        2. 27.7.3.2 AsyncFunction.prototype [ %Symbol.toStringTag% ]
      4. +27.7.4 AsyncFunction Instances
        1. 27.7.4.1 length
        2. 27.7.4.2 name
      5. +27.7.5 Async Functions Abstract Operations
        1. 27.7.5.1 AsyncFunctionStart (promiseCapability,asyncFunctionBody )
        2. 27.7.5.2 AsyncBlockStart (promiseCapability,asyncBody,asyncContext )
        3. 27.7.5.3 Await (value )
  29. +28 Reflection
    1. +28.1 The Reflect Object
      1. 28.1.1 Reflect.apply (target,thisArgument,argumentsList )
      2. 28.1.2 Reflect.construct (target,argumentsList [ ,newTarget ] )
      3. 28.1.3 Reflect.defineProperty (target,propertyKey,attributes )
      4. 28.1.4 Reflect.deleteProperty (target,propertyKey )
      5. 28.1.5 Reflect.get (target,propertyKey [ ,receiver ] )
      6. 28.1.6 Reflect.getOwnPropertyDescriptor (target,propertyKey )
      7. 28.1.7 Reflect.getPrototypeOf (target )
      8. 28.1.8 Reflect.has (target,propertyKey )
      9. 28.1.9 Reflect.isExtensible (target )
      10. 28.1.10 Reflect.ownKeys (target )
      11. 28.1.11 Reflect.preventExtensions (target )
      12. 28.1.12 Reflect.set (target,propertyKey,V [ ,receiver ] )
      13. 28.1.13 Reflect.setPrototypeOf (target,proto )
      14. 28.1.14 Reflect [ %Symbol.toStringTag% ]
    2. +28.2 Proxy Objects
      1. +28.2.1 The Proxy Constructor
        1. 28.2.1.1 Proxy (target,handler )
      2. +28.2.2 Properties of the Proxy Constructor
        1. 28.2.2.1 Proxy.revocable (target,handler )
    3. +28.3 Module Namespace Objects
      1. 28.3.1 %Symbol.toStringTag%
  30. +29 Memory Model
    1. 29.1 Memory Model Fundamentals
    2. 29.2 Agent Events Records
    3. 29.3 Chosen Value Records
    4. 29.4 Candidate Executions
    5. +29.5 Abstract Operations for the Memory Model
      1. 29.5.1 EventSet (execution )
      2. 29.5.2 SharedDataBlockEventSet (execution )
      3. 29.5.3 HostEventSet (execution )
      4. 29.5.4 ComposeWriteEventBytes (execution,byteIndex,Ws )
      5. 29.5.5 ValueOfReadEvent (execution,R )
    6. +29.6 Relations of Candidate Executions
      1. 29.6.1 is-agent-order-before
      2. 29.6.2 reads-bytes-from
      3. 29.6.3 reads-from
      4. 29.6.4 host-synchronizes-with
      5. 29.6.5 synchronizes-with
      6. 29.6.6 happens-before
    7. +29.7 Properties of Valid Executions
      1. 29.7.1 Valid Chosen Reads
      2. 29.7.2 Coherent Reads
      3. 29.7.3 Tear Free Reads
      4. 29.7.4 Sequentially Consistent Atomics
      5. 29.7.5 Valid Executions
    8. 29.8 Races
    9. 29.9 Data Races
    10. 29.10 Data Race Freedom
    11. 29.11 Shared Memory Guidelines
  31. +Annex A(informative) Grammar Summary
    1. A.1 Lexical Grammar
    2. A.2 Expressions
    3. A.3 Statements
    4. A.4 Functions and Classes
    5. A.5 Scripts and Modules
    6. A.6 Number Conversions
    7. A.7 Time Zone Offset String Format
    8. A.8 Regular Expressions
  32. +Annex B(normative) Additional ECMAScript Features for Web Browsers
    1. +B.1 Additional Syntax
      1. B.1.1 HTML-like Comments
      2. +B.1.2 Regular Expressions Patterns
        1. B.1.2.1 SS: Early Errors
        2. B.1.2.2 SS: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore
        3. B.1.2.3 SS: IsCharacterClass
        4. B.1.2.4 SS: CharacterValue
        5. B.1.2.5 RS: CompileSubpattern
        6. B.1.2.6 RS: CompileAssertion
        7. B.1.2.7 RS: CompileAtom
        8. +B.1.2.8 RS: CompileToCharSet
          1. B.1.2.8.1 CharacterRangeOrUnion (rer,A,B )
        9. B.1.2.9 SS: ParsePattern (patternText,u,v )
    2. +B.2 Additional Built-in Properties
      1. +B.2.1 Additional Properties of the Global Object
        1. B.2.1.1 escape (string )
        2. B.2.1.2 unescape (string )
      2. +B.2.2 Additional Properties of the String.prototype Object
        1. B.2.2.1 String.prototype.substr (start,length )
        2. +B.2.2.2 String.prototype.anchor (name )
          1. B.2.2.2.1 CreateHTML (string,tag,attribute,value )
        3. B.2.2.3 String.prototype.big ( )
        4. B.2.2.4 String.prototype.blink ( )
        5. B.2.2.5 String.prototype.bold ( )
        6. B.2.2.6 String.prototype.fixed ( )
        7. B.2.2.7 String.prototype.fontcolor (colour )
        8. B.2.2.8 String.prototype.fontsize (size )
        9. B.2.2.9 String.prototype.italics ( )
        10. B.2.2.10 String.prototype.link (url )
        11. B.2.2.11 String.prototype.small ( )
        12. B.2.2.12 String.prototype.strike ( )
        13. B.2.2.13 String.prototype.sub ( )
        14. B.2.2.14 String.prototype.sup ( )
        15. B.2.2.15 String.prototype.trimLeft ( )
        16. B.2.2.16 String.prototype.trimRight ( )
      3. +B.2.3 Additional Properties of the Date.prototype Object
        1. B.2.3.1 Date.prototype.getYear ( )
        2. B.2.3.2 Date.prototype.setYear (year )
        3. B.2.3.3 Date.prototype.toGMTString ( )
      4. +B.2.4 Additional Properties of the RegExp.prototype Object
        1. B.2.4.1 RegExp.prototype.compile (pattern,flags )
    3. +B.3 Other Additional Features
      1. B.3.1 Labelled Function Declarations
      2. B.3.2 Block-Level Function Declarations Web Legacy Compatibility Semantics
      3. B.3.3 FunctionDeclarations in IfStatement Statement Clauses
      4. B.3.4 VariableStatements in Catch Blocks
      5. B.3.5 Initializers in ForIn Statement Heads
      6. B.3.6 The[[IsHTMLDDA]] Internal Slot
      7. B.3.7 Non-default behaviour in HostMakeJobCallback
      8. B.3.8 Non-default behaviour in HostEnsureCanAddPrivateElement
      9. B.3.9 Runtime Errors for Function Call Assignment Targets
  33. Annex C(informative) The Strict Mode of ECMAScript
  34. +Annex D(informative) Host Layering Points
    1. D.1 Host Hooks
    2. D.2 Host-defined Fields
    3. D.3 Host-defined Objects
    4. D.4 Running Jobs
    5. D.5 Internal Methods of Exotic Objects
    6. D.6 Built-in Objects and Methods
  35. Annex E(informative) Corrections and Clarifications in ECMAScript 2015 with Possible Compatibility Impact
  36. Annex F(informative) Additions and Changes That Introduce Incompatibilities with Prior Editions
  37. Bibliography
  38. Colophon
  39. Copyright & Software License
Menu

16 ECMAScript Language: Scripts and Modules

16.1 Scripts

Syntax

Script:ScriptBodyoptScriptBody:StatementList[~Yield, ~Await, ~Return]

16.1.1 Static Semantics: Early Errors

Script:ScriptBodyScriptBody:StatementList

16.1.2 Static Semantics: ScriptIsStrict

Thesyntax-directed operation ScriptIsStrict takes no arguments and returns a Boolean. It is defined piecewise over the following productions:

Script:ScriptBodyopt
  1. IfScriptBody is present and theDirective Prologue ofScriptBody contains aUse Strict Directive, returntrue; otherwise returnfalse.

16.1.3 Runtime Semantics: Evaluation

Script:[empty]
  1. Returnundefined.

16.1.4 Script Records

AScript Record encapsulates information about a script being evaluated. Each script record contains the fields listed inTable 37.

Table 37:Script Record Fields
Field Name Value Type Meaning
[[Realm]] aRealm Record Therealm within which this script was created.
[[ECMAScriptCode]] aScriptParse Node The result of parsing the source text of this script.
[[LoadedModules]] aList ofLoadedModuleRequest Records A map from the specifier strings imported by this script to the resolvedModule Record. The list does not contain two differentRecordsr1 andr2 such thatModuleRequestsEqual(r1,r2) istrue.
[[HostDefined]] anything (default value isempty) Field reserved for use byhost environments that need to associate additional information with a script.

16.1.5 ParseScript (sourceText,realm,hostDefined )

The abstract operation ParseScript takes argumentssourceText (ECMAScript source text),realm (aRealm Record), andhostDefined (anything) and returns aScript Record or a non-emptyList ofSyntaxError objects. It creates aScript Record based upon the result of parsingsourceText as aScript. It performs the following steps when called:

  1. Letscript beParseText(sourceText,Script).
  2. Ifscript is aList of errors, returnscript.
  3. ReturnScript Record {[[Realm]]:realm,[[ECMAScriptCode]]:script,[[LoadedModules]]: « »,[[HostDefined]]:hostDefined }.
Note

An implementation may parse script source text and analyse it for Early Error conditions prior to evaluation of ParseScript for that script source text. However, the reporting of any errors must be deferred until the point where this specification actually performs ParseScript upon that source text.

16.1.6 ScriptEvaluation (scriptRecord )

The abstract operation ScriptEvaluation takes argumentscriptRecord (aScript Record) and returns either anormal completion containing anECMAScript language value or anabrupt completion. It performs the following steps when called:

  1. LetglobalEnv bescriptRecord.[[Realm]].[[GlobalEnv]].
  2. LetscriptContext be a newECMAScript code execution context.
  3. Set the Function ofscriptContext tonull.
  4. Set theRealm ofscriptContext toscriptRecord.[[Realm]].
  5. Set the ScriptOrModule ofscriptContext toscriptRecord.
  6. Set the VariableEnvironment ofscriptContext toglobalEnv.
  7. Set the LexicalEnvironment ofscriptContext toglobalEnv.
  8. Set the PrivateEnvironment ofscriptContext tonull.
  9. Suspend therunning execution context.
  10. PushscriptContext onto theexecution context stack;scriptContext is now therunning execution context.
  11. Letscript bescriptRecord.[[ECMAScriptCode]].
  12. Letresult beCompletion(GlobalDeclarationInstantiation(script,globalEnv)).
  13. Ifresult is anormal completion, then
    1. Setresult toCompletion(Evaluation ofscript).
    2. Ifresult is anormal completion andresult.[[Value]] isempty, then
      1. Setresult toNormalCompletion(undefined).
  14. SuspendscriptContext and remove it from theexecution context stack.
  15. Assert: Theexecution context stack is not empty.
  16. Resume the context that is now on the top of theexecution context stack as therunning execution context.
  17. Return ? result.

16.1.7 GlobalDeclarationInstantiation (script,env )

The abstract operation GlobalDeclarationInstantiation takes argumentsscript (aScriptParse Node) andenv (aGlobal Environment Record) and returns either anormal completion containingunused or athrow completion.script is theScript for which theexecution context is being established.env is the global environment in which bindings are to be created.

Note 1

When anexecution context is established for evaluating scripts, declarations are instantiated in the current global environment. Each global binding declared in the code is instantiated.

It performs the following steps when called:

  1. LetlexNames be theLexicallyDeclaredNames ofscript.
  2. LetvarNames be theVarDeclaredNames ofscript.
  3. For each elementname oflexNames, do
    1. IfHasLexicalDeclaration(env,name) istrue, throw aSyntaxError exception.
    2. LethasRestrictedGlobal be ? HasRestrictedGlobalProperty(env,name).
    3. NOTE: Globalvar andfunction bindings (except those that are introduced by non-strictdirect eval) are non-configurable and are therefore restricted global properties.
    4. IfhasRestrictedGlobal istrue, throw aSyntaxError exception.
  4. For each elementname ofvarNames, do
    1. IfHasLexicalDeclaration(env,name) istrue, throw aSyntaxError exception.
  5. LetvarDeclarations be theVarScopedDeclarations ofscript.
  6. LetfunctionsToInitialize be a new emptyList.
  7. LetdeclaredFunctionNames be a new emptyList.
  8. For each elementd ofvarDeclarations, in reverseList order, do
    1. Ifd is not either aVariableDeclaration, aForBinding, or aBindingIdentifier, then
      1. Assert:d is either aFunctionDeclaration, aGeneratorDeclaration, anAsyncFunctionDeclaration, or anAsyncGeneratorDeclaration.
      2. NOTE: If there are multiple function declarations for the same name, the last declaration is used.
      3. Letfn be the sole element of theBoundNames ofd.
      4. IfdeclaredFunctionNames does not containfn, then
        1. LetfnDefinable be ? CanDeclareGlobalFunction(env,fn).
        2. IffnDefinable isfalse, throw aTypeError exception.
        3. Appendfn todeclaredFunctionNames.
        4. Insertd as the first element offunctionsToInitialize.
  9. LetdeclaredVarNames be a new emptyList.
  10. For each elementd ofvarDeclarations, do
    1. Ifd is either aVariableDeclaration, aForBinding, or aBindingIdentifier, then
      1. For each Stringvn of theBoundNames ofd, do
        1. IfdeclaredFunctionNames does not containvn, then
          1. LetvnDefinable be ? CanDeclareGlobalVar(env,vn).
          2. IfvnDefinable isfalse, throw aTypeError exception.
          3. IfdeclaredVarNames does not containvn, then
            1. Appendvn todeclaredVarNames.
  11. NOTE: No abnormal terminations occur after this algorithm step if theglobal object is anordinary object. However, if theglobal object is aProxy exotic object it may exhibit behaviours that cause abnormal terminations in some of the following steps.
  12. If thehost is a web browser or otherwise supportsBlock-Level Function Declarations Web Legacy Compatibility Semantics, then
    1. Letstrict beScriptIsStrict ofscript.
    2. Ifstrict isfalse, then
      1. LetdeclaredFunctionOrVarNames be thelist-concatenation ofdeclaredFunctionNames anddeclaredVarNames.
      2. For eachFunctionDeclarationf that is directly contained in theStatementList of anyBlock,CaseClause, orDefaultClausex such thatscriptContainsx istrue, do
        1. LetF be theStringValue of theBindingIdentifier off.
        2. If replacing theFunctionDeclarationf with aVariableStatement that hasF as aBindingIdentifier would not produce any Early Errors forscript, then
          1. IfHasLexicalDeclaration(env,F) isfalse, then
            1. LetfnDefinable be ? CanDeclareGlobalVar(env,F).
            2. IffnDefinable istrue, then
              1. NOTE: A var binding forF is only instantiated here if it is neither a VarDeclaredName nor the name of anotherFunctionDeclaration.
              2. IfdeclaredFunctionOrVarNames does not containF, then
                1. Perform ? CreateGlobalVarBinding(env,F,false).
                2. AppendF todeclaredFunctionOrVarNames.
              3. When theFunctionDeclarationf is evaluated, perform the following steps in place of theFunctionDeclarationEvaluation algorithm provided in15.2.6:
                1. LetgEnv be therunning execution context's VariableEnvironment.
                2. LetbEnv be therunning execution context's LexicalEnvironment.
                3. LetfObj be ! bEnv.GetBindingValue(F,false).
                4. Perform ? gEnv.SetMutableBinding(F,fObj,false).
                5. Returnunused.
  13. LetlexDeclarations be theLexicallyScopedDeclarations ofscript.
  14. LetprivateEnv benull.
  15. For each elementd oflexDeclarations, do
    1. NOTE: Lexically declared names are only instantiated here but not initialized.
    2. For each elementdn of theBoundNames ofd, do
      1. IfIsConstantDeclaration ofd istrue, then
        1. Perform ? env.CreateImmutableBinding(dn,true).
      2. Else,
        1. Perform ? env.CreateMutableBinding(dn,false).
  16. For eachParse Nodef offunctionsToInitialize, do
    1. Letfn be the sole element of theBoundNames off.
    2. Letfo beInstantiateFunctionObject off with argumentsenv andprivateEnv.
    3. Perform ? CreateGlobalFunctionBinding(env,fn,fo,false).
  17. For each Stringvn ofdeclaredVarNames, do
    1. Perform ? CreateGlobalVarBinding(env,vn,false).
  18. Returnunused.
Note 2

Early errors specified in16.1.1 prevent name conflicts between function/var declarations and let/const/class declarations as well as redeclaration of let/const/class bindings for declaration contained within a singleScript. However, such conflicts and redeclarations that span more than oneScript are detected as runtime errors during GlobalDeclarationInstantiation. If any such errors are detected, no bindings are instantiated for the script. However, if theglobal object is defined usingProxy exotic objects then the runtime tests for conflicting declarations may be unreliable resulting in anabrupt completion and some global declarations not being instantiated. If this occurs, the code for theScript is not evaluated.

Unlike explicit var or function declarations, properties that are directly created on theglobal object result in global bindings that may be shadowed by let/const/class declarations.

16.2 Modules

Syntax

Module:ModuleBodyoptModuleBody:ModuleItemListModuleItemList:ModuleItemModuleItemListModuleItemModuleItem:ImportDeclarationExportDeclarationStatementListItem[~Yield, +Await, ~Return]ModuleExportName:IdentifierNameStringLiteral

16.2.1 Module Semantics

16.2.1.1 Static Semantics: Early Errors

ModuleBody:ModuleItemListNote

The duplicateExportedNames rule implies that multipleexport defaultExportDeclaration items within aModuleBody is a Syntax Error. Additional error conditions relating to conflicting or duplicate declarations are checked during module linking prior to evaluation of aModule. If any such errors are detected theModule is not evaluated.

ModuleExportName:StringLiteral

16.2.1.2 Static Semantics: ImportedLocalNames (importEntries )

The abstract operation ImportedLocalNames takes argumentimportEntries (aList ofImportEntry Records) and returns aList of Strings. It creates aList of all of the local name bindings defined byimportEntries. It performs the following steps when called:

  1. LetlocalNames be a new emptyList.
  2. For eachImportEntry Recordi ofimportEntries, do
    1. Appendi.[[LocalName]] tolocalNames.
  3. ReturnlocalNames.

16.2.1.3 ModuleRequest Records

AModuleRequest Record represents the request to import a module with given import attributes. It consists of the following fields:

Table 38:ModuleRequest Record Fields
Field Name Value Type Meaning
[[Specifier]] a String The module specifier
[[Attributes]] aList ofImportAttribute Records The import attributes

ALoadedModuleRequest Record represents the request to import a module together with the resultingModule Record. It consists of the same fields defined in tableTable 38, with the addition of[[Module]]:

Table 39:LoadedModuleRequest Record Fields
Field Name Value Type Meaning
[[Specifier]] a String The module specifier
[[Attributes]] aList ofImportAttribute Records The import attributes
[[Module]] aModule Record The loaded module corresponding to this module request

AnImportAttribute Record consists of the following fields:

Table 40:ImportAttribute Record Fields
Field Name Value Type Meaning
[[Key]] a String The attribute key
[[Value]] a String The attribute value

16.2.1.3.1 ModuleRequestsEqual (left,right )

The abstract operation ModuleRequestsEqual takes argumentsleft (aModuleRequest Record or aLoadedModuleRequest Record) andright (aModuleRequest Record or aLoadedModuleRequest Record) and returns a Boolean. It performs the following steps when called:

  1. Ifleft.[[Specifier]] is notright.[[Specifier]], returnfalse.
  2. LetleftAttrs beleft.[[Attributes]].
  3. LetrightAttrs beright.[[Attributes]].
  4. LetleftAttrsCount be the number of elements inleftAttrs.
  5. LetrightAttrsCount be the number of elements inrightAttrs.
  6. IfleftAttrsCountrightAttrsCount, returnfalse.
  7. For eachImportAttribute Recordl ofleftAttrs, do
    1. IfrightAttrs does not contain anImportAttribute Recordr such thatl.[[Key]] isr.[[Key]] andl.[[Value]] isr.[[Value]], returnfalse.
  8. Returntrue.

16.2.1.4 Static Semantics: ModuleRequests

Thesyntax-directed operation ModuleRequests takes no arguments and returns aList ofModuleRequest Records. It is defined piecewise over the following productions:

Module:[empty]
  1. Return a new emptyList.
ModuleItemList:ModuleItem
  1. Return theModuleRequests ofModuleItem.
ModuleItemList:ModuleItemListModuleItem
  1. Letrequests be theModuleRequests ofModuleItemList.
  2. LetadditionalRequests be theModuleRequests ofModuleItem.
  3. For eachModuleRequest Recordmr ofadditionalRequests, do
    1. Ifrequests does not contain aModuleRequest Recordmr2 such thatModuleRequestsEqual(mr,mr2) istrue, then
      1. Appendmr torequests.
  4. Returnrequests.
ModuleItem:StatementListItem
  1. Return a new emptyList.
ImportDeclaration:importImportClauseFromClause;
  1. Letspecifier be theSV ofFromClause.
  2. Return aList whose sole element is theModuleRequest Record {[[Specifier]]:specifier,[[Attributes]]: « » }.
ImportDeclaration:importImportClauseFromClauseWithClause;
  1. Letspecifier be theSV ofFromClause.
  2. Letattributes beWithClauseToAttributes ofWithClause.
  3. Return aList whose sole element is theModuleRequest Record {[[Specifier]]:specifier,[[Attributes]]:attributes }.
ImportDeclaration:importModuleSpecifier;
  1. Letspecifier be theSV ofModuleSpecifier.
  2. Return aList whose sole element is theModuleRequest Record {[[Specifier]]:specifier,[[Attributes]]: « » }.
ImportDeclaration:importModuleSpecifierWithClause;
  1. Letspecifier be theSV ofModuleSpecifier.
  2. Letattributes beWithClauseToAttributes ofWithClause.
  3. Return aList whose sole element is theModuleRequest Record {[[Specifier]]:specifier,[[Attributes]]:attributes }.
ExportDeclaration:exportExportFromClauseFromClause;
  1. Letspecifier be theSV ofFromClause.
  2. Return aList whose sole element is theModuleRequest Record {[[Specifier]]:specifier,[[Attributes]]: « » }.
ExportDeclaration:exportExportFromClauseFromClauseWithClause;
  1. Letspecifier be theSV ofFromClause.
  2. Letattributes beWithClauseToAttributes ofWithClause.
  3. Return aList whose sole element is theModuleRequest Record {[[Specifier]]:specifier,[[Attributes]]:attributes }.
ExportDeclaration:exportNamedExports;exportVariableStatementexportDeclarationexportdefaultHoistableDeclarationexportdefaultClassDeclarationexportdefaultAssignmentExpression;
  1. Return a new emptyList.

16.2.1.5 Abstract Module Records

AModule Record encapsulates structural information about the imports and exports of a single module. This information is used to link the imports and exports of sets of connected modules. A Module Record includes four fields that are only used when evaluating a module.

For specification purposes Module Record values are values of theRecord specification type and can be thought of as existing in a simple object-oriented hierarchy where Module Record is an abstract class with both abstract and concrete subclasses. This specification defines the abstract subclass namedCyclic Module Record and its concrete subclass namedSource Text Module Record. Other specifications and implementations may define additional Module Record subclasses corresponding to alternative module definition facilities that they defined.

Module Record defines the fields listed inTable 41. All Module Definition subclasses include at least those fields. Module Record also defines the abstract method list inTable 42. All Module definition subclasses must provide concrete implementations of these abstract methods.

Table 41:Module Record Fields
Field Name Value Type Meaning
[[Realm]] aRealm Record TheRealm within which this module was created.
[[Environment]] aModule Environment Record orempty TheEnvironment Record containing the top level bindings for this module. This field is set when the module is linked.
[[Namespace]] an Object orempty The Module Namespace Object (28.3) if one has been created for this module.
[[HostDefined]] anything (default value isundefined) Field reserved for use byhost environments that need to associate additional information with a module.
Table 42: Abstract Methods ofModule Records
Method Purpose
LoadRequestedModules([hostDefined])

Prepares the module for linking by recursively loading all its dependencies, and returns a promise.

GetExportedNames([exportStarSet])

Return a list of all names that are either directly or indirectly exported from this module.

LoadRequestedModules must have completed successfully prior to invoking this method.

ResolveExport(exportName [,resolveSet])

Return the binding of a name exported by this module. Bindings are represented by aResolvedBinding Record, of the form {[[Module]]:Module Record,[[BindingName]]: String |namespace }. If the export is a Module Namespace Object without a direct binding in any module,[[BindingName]] will be set tonamespace. Returnnull if the name cannot be resolved, orambiguous if multiple bindings were found.

Each time this operation is called with a specificexportName,resolveSet pair as arguments it must return the same result.

LoadRequestedModules must have completed successfully prior to invoking this method.

Link()

Prepare the module for evaluation by transitively resolving all module dependencies and creating aModule Environment Record.

LoadRequestedModules must have completed successfully prior to invoking this method.

Evaluate()

Returns a promise for the evaluation of this module and its dependencies, resolving on successful evaluation or if it has already been evaluated successfully, and rejecting for an evaluation error or if it has already been evaluated unsuccessfully. If the promise is rejected,hosts are expected to handle the promise rejection and rethrow the evaluation error.

Link must have completed successfully prior to invoking this method.

16.2.1.5.1 EvaluateModuleSync (module )

The abstract operation EvaluateModuleSync takes argumentmodule (aModule Record) and returns either anormal completion containingunused or athrow completion. It synchronously evaluatesmodule, provided that the caller guarantees thatmodule's evaluation will return an already settled promise. It performs the following steps when called:

  1. Assert:module is not aCyclic Module Record.
  2. Letpromise bemodule.Evaluate().
  3. Assert:promise.[[PromiseState]] is eitherfulfilled orrejected.
  4. Ifpromise.[[PromiseState]] isrejected, then
    1. Ifpromise.[[PromiseIsHandled]] isfalse, performHostPromiseRejectionTracker(promise,"handle").
    2. Setpromise.[[PromiseIsHandled]] totrue.
    3. ReturnThrowCompletion(promise.[[PromiseResult]]).
  5. Returnunused.

16.2.1.6 Cyclic Module Records

ACyclic Module Record is used to represent information about a module that can participate in dependency cycles with other modules that are subclasses of theCyclic Module Record type.Module Records that are not subclasses of theCyclic Module Record type must not participate in dependency cycles withSource Text Module Records.

In addition to the fields defined inTable 41Cyclic Module Records have the additional fields listed inTable 43

Table 43: Additional Fields ofCyclic Module Records
Field Name Value Type Meaning
[[Status]]new,unlinked,linking,linked,evaluating,evaluating-async, orevaluated Initiallynew. Transitions tounlinked,linking,linked,evaluating, possiblyevaluating-async,evaluated (in that order) as the module progresses throughout its lifecycle.evaluating-async indicates this module is queued to execute on completion of its asynchronous dependencies or it is a module whose[[HasTLA]] field istrue that has been executed and is pending top-level completion.
[[EvaluationError]] athrow completion orempty Athrow completion representing the exception that occurred during evaluation.undefined if no exception occurred or if[[Status]] is notevaluated.
[[DFSAncestorIndex]] aninteger orempty Auxiliary field used during Link and Evaluate only. If[[Status]] is eitherlinking orevaluating, this is either the module's depth-first traversal index or that of an "earlier" module in the same strongly connected component.
[[RequestedModules]] aList ofModuleRequest Records AList of theModuleRequest Records associated with the imports in this module. TheList is in source text occurrence order of the imports.
[[LoadedModules]] aList ofLoadedModuleRequest Records A map from the specifier strings used by the module represented by this record to request the importation of a module with the relative import attributes to the resolvedModule Record. The list does not contain two differentRecordsr1 andr2 such thatModuleRequestsEqual(r1,r2) istrue.
[[CycleRoot]] aCyclic Module Record orempty The first visited module of the cycle, the root DFS ancestor of the strongly connected component. For a module not in a cycle, this would be the module itself. Once Evaluate has completed, a module's[[DFSAncestorIndex]] is the depth-first traversal index of its[[CycleRoot]].
[[HasTLA]] a Boolean Whether this module is individually asynchronous (for example, if it's aSource Text Module Record containing a top-level await). Having an asynchronous dependency does not mean this field istrue. This field must not change after the module is parsed.
[[AsyncEvaluationOrder]]unset, aninteger, ordone This field is initially set tounset, and remainsunset for fully synchronous modules. For modules that are either themselves asynchronous or have an asynchronous dependency, it is set to aninteger that determines the order in which execution of pending modules is queued by16.2.1.6.1.3.4. Once the pending module is executed, the field is set todone.
[[TopLevelCapability]] aPromiseCapability Record orempty If this module is the[[CycleRoot]] of some cycle, and Evaluate() was called on some module in that cycle, this field contains thePromiseCapability Record for that entire evaluation. It is used to settle the Promise object that is returned from the Evaluate() abstract method. This field will beempty for any dependencies of that module, unless a top-level Evaluate() has been initiated for some of those dependencies.
[[AsyncParentModules]] aList ofCyclic Module Records If this module or a dependency has[[HasTLA]]true, and execution is in progress, this tracks the parent importers of this module for the top-level execution job. These parent modules will not start executing before this module has successfully completed execution.
[[PendingAsyncDependencies]] aninteger orempty If this module has any asynchronous dependencies, this tracks the number of asynchronous dependency modules remaining to execute for this module. A module with asynchronous dependencies will be executed when this field reaches 0 and there are no execution errors.

In addition to the methods defined inTable 42Cyclic Module Records have the additional methods listed inTable 44

Table 44: Additional Abstract Methods ofCyclic Module Records
Method Purpose
InitializeEnvironment() Initialize theEnvironment Record of the module, including resolving all imported bindings, and create the module'sexecution context.
ExecuteModule([promiseCapability]) Evaluate the module's code within itsexecution context. If this module hastrue in[[HasTLA]], then aPromiseCapability Record is passed as an argument, and the method is expected to resolve or reject the given capability. In this case, the method must not throw an exception, but instead reject thePromiseCapability Record if necessary.

AGraphLoadingState Record is aRecord that contains information about the loading process of a module graph. It's used to continue loading after a call toHostLoadImportedModule. EachGraphLoadingState Record has the fields defined inTable 45:

Table 45:GraphLoadingState Record Fields
Field Name Value Type Meaning
[[PromiseCapability]] aPromiseCapability Record The promise to resolve when the loading process finishes.
[[IsLoading]] a Boolean It is true if the loading process has not finished yet, neither successfully nor with an error.
[[PendingModulesCount]] a non-negativeinteger It tracks the number of pendingHostLoadImportedModule calls.
[[Visited]] aList ofCyclic Module Records It is a list of theCyclic Module Records that have been already loaded by the current loading process, to avoid infinite loops with circular dependencies.
[[HostDefined]] anything (default value isempty) It containshost-defined data to pass from the LoadRequestedModules caller toHostLoadImportedModule.

16.2.1.6.1 Implementation of Module Record Abstract Methods

The following are the concrete methods forCyclic Module Record that implement the correspondingModule Record abstract methods defined inTable 42.

16.2.1.6.1.1 LoadRequestedModules ( [hostDefined ] )

The LoadRequestedModules concrete method of aCyclic Module Recordmodule takes optional argumenthostDefined (anything) and returns a Promise. It populates the[[LoadedModules]] of all theModule Records in the dependency graph ofmodule (most of the work is done by the auxiliary functionInnerModuleLoading). It takes an optionalhostDefined parameter that is passed to theHostLoadImportedModule hook. It performs the following steps when called:

  1. IfhostDefined is not present, lethostDefined beempty.
  2. Letpc be ! NewPromiseCapability(%Promise%).
  3. Letstate be theGraphLoadingState Record {[[IsLoading]]:true,[[PendingModulesCount]]: 1,[[Visited]]: « »,[[PromiseCapability]]:pc,[[HostDefined]]:hostDefined }.
  4. PerformInnerModuleLoading(state,module).
  5. Returnpc.[[Promise]].
Note
ThehostDefined parameter can be used to pass additional information necessary to fetch the imported modules. It is used, for example, by HTML to set the correct fetch destination for<link rel="preload" as="..."> tags.import() expressions never set thehostDefined parameter.

16.2.1.6.1.1.1 InnerModuleLoading (state,module )

The abstract operation InnerModuleLoading takes argumentsstate (aGraphLoadingState Record) andmodule (aModule Record) and returnsunused. It is used by LoadRequestedModules to recursively perform the actual loading process formodule's dependency graph. It performs the following steps when called:

  1. Assert:state.[[IsLoading]] istrue.
  2. Ifmodule is aCyclic Module Record,module.[[Status]] isnew, andstate.[[Visited]] does not containmodule, then
    1. Appendmodule tostate.[[Visited]].
    2. LetrequestedModulesCount be the number of elements inmodule.[[RequestedModules]].
    3. Setstate.[[PendingModulesCount]] tostate.[[PendingModulesCount]] +requestedModulesCount.
    4. For eachModuleRequest Recordrequest ofmodule.[[RequestedModules]], do
      1. IfAllImportAttributesSupported(request.[[Attributes]]) isfalse, then
        1. Leterror beThrowCompletion(a newly createdSyntaxError object).
        2. PerformContinueModuleLoading(state,error).
      2. Else ifmodule.[[LoadedModules]] contains aLoadedModuleRequest Recordrecord such thatModuleRequestsEqual(record,request) istrue, then
        1. PerformInnerModuleLoading(state,record.[[Module]]).
      3. Else,
        1. PerformHostLoadImportedModule(module,request,state.[[HostDefined]],state).
        2. NOTE:HostLoadImportedModule will callFinishLoadingImportedModule, which re-enters the graph loading process throughContinueModuleLoading.
      4. Ifstate.[[IsLoading]] isfalse, returnunused.
  3. Assert:state.[[PendingModulesCount]] ≥ 1.
  4. Setstate.[[PendingModulesCount]] tostate.[[PendingModulesCount]] - 1.
  5. Ifstate.[[PendingModulesCount]] = 0, then
    1. Setstate.[[IsLoading]] tofalse.
    2. For eachCyclic Module Recordloaded ofstate.[[Visited]], do
      1. Ifloaded.[[Status]] isnew, setloaded.[[Status]] tounlinked.
    3. Perform ! Call(state.[[PromiseCapability]].[[Resolve]],undefined, «undefined »).
  6. Returnunused.

16.2.1.6.1.1.2 ContinueModuleLoading (state,moduleCompletion )

The abstract operation ContinueModuleLoading takes argumentsstate (aGraphLoadingState Record) andmoduleCompletion (either anormal completion containing aModule Record or athrow completion) and returnsunused. It is used to re-enter the loading process after a call toHostLoadImportedModule. It performs the following steps when called:

  1. Ifstate.[[IsLoading]] isfalse, returnunused.
  2. IfmoduleCompletion is anormal completion, then
    1. PerformInnerModuleLoading(state,moduleCompletion.[[Value]]).
  3. Else,
    1. Setstate.[[IsLoading]] tofalse.
    2. Perform ! Call(state.[[PromiseCapability]].[[Reject]],undefined, «moduleCompletion.[[Value]] »).
  4. Returnunused.

16.2.1.6.1.2 Link ( )

The Link concrete method of aCyclic Module Recordmodule takes no arguments and returns either anormal completion containingunused or athrow completion. On success, Link transitions this module's[[Status]] fromunlinked tolinked. On failure, an exception is thrown and this module's[[Status]] remainsunlinked. (Most of the work is done by the auxiliary functionInnerModuleLinking.) It performs the following steps when called:

  1. Assert:module.[[Status]] is one ofunlinked,linked,evaluating-async, orevaluated.
  2. Letstack be a new emptyList.
  3. Letresult beCompletion(InnerModuleLinking(module,stack, 0)).
  4. Ifresult is anabrupt completion, then
    1. For eachCyclic Module Recordm ofstack, do
      1. Assert:m.[[Status]] islinking.
      2. Setm.[[Status]] tounlinked.
    2. Assert:module.[[Status]] isunlinked.
    3. Return ? result.
  5. Assert:module.[[Status]] is one oflinked,evaluating-async, orevaluated.
  6. Assert:stack is empty.
  7. Returnunused.

16.2.1.6.1.2.1 InnerModuleLinking (module,stack,index )

The abstract operation InnerModuleLinking takes argumentsmodule (aModule Record),stack (aList ofCyclic Module Records), andindex (a non-negativeinteger) and returns either anormal completion containing a non-negativeinteger or athrow completion. It is used by Link to perform the actual linking process formodule, as well as recursively on all other modules in the dependency graph. Thestack andindex parameters, as well as a module's[[DFSAncestorIndex]] field, keep track of the depth-first search (DFS) traversal. In particular,[[DFSAncestorIndex]] is used to discover strongly connected components (SCCs), such that all modules in an SCC transition tolinked together. It performs the following steps when called:

  1. Ifmodule is not aCyclic Module Record, then
    1. Perform ? module.Link().
    2. Returnindex.
  2. Ifmodule.[[Status]] is one oflinking,linked,evaluating-async, orevaluated, then
    1. Returnindex.
  3. Assert:module.[[Status]] isunlinked.
  4. Setmodule.[[Status]] tolinking.
  5. LetmoduleIndex beindex.
  6. Setmodule.[[DFSAncestorIndex]] toindex.
  7. Setindex toindex + 1.
  8. Appendmodule tostack.
  9. For eachModuleRequest Recordrequest ofmodule.[[RequestedModules]], do
    1. LetrequiredModule beGetImportedModule(module,request).
    2. Setindex to ? InnerModuleLinking(requiredModule,stack,index).
    3. IfrequiredModule is aCyclic Module Record, then
      1. Assert:requiredModule.[[Status]] is one oflinking,linked,evaluating-async, orevaluated.
      2. Assert:requiredModule.[[Status]] islinking if and only ifstack containsrequiredModule.
      3. IfrequiredModule.[[Status]] islinking, then
        1. Setmodule.[[DFSAncestorIndex]] tomin(module.[[DFSAncestorIndex]],requiredModule.[[DFSAncestorIndex]]).
  10. Perform ? module.InitializeEnvironment().
  11. Assert:module occurs exactly once instack.
  12. Assert:module.[[DFSAncestorIndex]]moduleIndex.
  13. Ifmodule.[[DFSAncestorIndex]] =moduleIndex, then
    1. Letdone befalse.
    2. Repeat, whiledone isfalse,
      1. LetrequiredModule be the last element ofstack.
      2. Remove the last element ofstack.
      3. Assert:requiredModule is aCyclic Module Record.
      4. SetrequiredModule.[[Status]] tolinked.
      5. IfrequiredModule andmodule are the sameModule Record, setdone totrue.
  14. Returnindex.

16.2.1.6.1.3 Evaluate ( )

The Evaluate concrete method of aCyclic Module Recordmodule takes no arguments and returns a Promise. Evaluate transitions this module's[[Status]] fromlinked to eitherevaluating-async orevaluated. The first time it is called on a module in a given strongly connected component, Evaluate creates and returns a Promise which resolves when the module has finished evaluating. This Promise is stored in the[[TopLevelCapability]] field of the[[CycleRoot]] for the component. Future invocations of Evaluate on any module in the component return the same Promise. (Most of the work is done by the auxiliary functionInnerModuleEvaluation.) It performs the following steps when called:

  1. Assert: This call to Evaluate is not happening at the same time as another call to Evaluate within thesurrounding agent.
  2. Assert:module.[[Status]] is one oflinked,evaluating-async, orevaluated.
  3. Ifmodule.[[Status]] is eitherevaluating-async orevaluated, setmodule tomodule.[[CycleRoot]].
  4. Ifmodule.[[TopLevelCapability]] is notempty, then
    1. Returnmodule.[[TopLevelCapability]].[[Promise]].
  5. Letstack be a new emptyList.
  6. Letcapability be ! NewPromiseCapability(%Promise%).
  7. Setmodule.[[TopLevelCapability]] tocapability.
  8. Letresult beCompletion(InnerModuleEvaluation(module,stack, 0)).
  9. Ifresult is anabrupt completion, then
    1. For eachCyclic Module Recordm ofstack, do
      1. Assert:m.[[Status]] isevaluating.
      2. Assert:m.[[AsyncEvaluationOrder]] isunset.
      3. Setm.[[Status]] toevaluated.
      4. Setm.[[EvaluationError]] toresult.
    2. Assert:module.[[Status]] isevaluated.
    3. Assert:module.[[EvaluationError]] andresult are the sameCompletion Record.
    4. Perform ! Call(capability.[[Reject]],undefined, «result.[[Value]] »).
  10. Else,
    1. Assert:module.[[Status]] is eitherevaluating-async orevaluated.
    2. Assert:module.[[EvaluationError]] isempty.
    3. Ifmodule.[[Status]] isevaluated, then
      1. Assert:module.[[AsyncEvaluationOrder]] is eitherunset ordone.
      2. NOTE:module.[[AsyncEvaluationOrder]] isdone if and only ifmodule had already been evaluated and that evaluation was asynchronous.
      3. Perform ! Call(capability.[[Resolve]],undefined, «undefined »).
    4. Assert:stack is empty.
  11. Returncapability.[[Promise]].

16.2.1.6.1.3.1 InnerModuleEvaluation (module,stack,index )

The abstract operation InnerModuleEvaluation takes argumentsmodule (aModule Record),stack (aList ofCyclic Module Records), andindex (a non-negativeinteger) and returns either anormal completion containing a non-negativeinteger or athrow completion. It is used by Evaluate to perform the actual evaluation process formodule, as well as recursively on all other modules in the dependency graph. Thestack andindex parameters, as well asmodule's[[DFSAncestorIndex]] field, are used the same way as inInnerModuleLinking. It performs the following steps when called:

  1. Ifmodule is not aCyclic Module Record, then
    1. Perform ? EvaluateModuleSync(module).
    2. Returnindex.
  2. Ifmodule.[[Status]] is eitherevaluating-async orevaluated, then
    1. Ifmodule.[[EvaluationError]] isempty, returnindex.
    2. Otherwise, return ? module.[[EvaluationError]].
  3. Ifmodule.[[Status]] isevaluating, returnindex.
  4. Assert:module.[[Status]] islinked.
  5. Setmodule.[[Status]] toevaluating.
  6. LetmoduleIndex beindex.
  7. Setmodule.[[DFSAncestorIndex]] toindex.
  8. Setmodule.[[PendingAsyncDependencies]] to 0.
  9. Setindex toindex + 1.
  10. Appendmodule tostack.
  11. For eachModuleRequest Recordrequest ofmodule.[[RequestedModules]], do
    1. LetrequiredModule beGetImportedModule(module,request).
    2. Setindex to ? InnerModuleEvaluation(requiredModule,stack,index).
    3. IfrequiredModule is aCyclic Module Record, then
      1. Assert:requiredModule.[[Status]] is one ofevaluating,evaluating-async, orevaluated.
      2. Assert:requiredModule.[[Status]] isevaluating if and only ifstack containsrequiredModule.
      3. IfrequiredModule.[[Status]] isevaluating, then
        1. Setmodule.[[DFSAncestorIndex]] tomin(module.[[DFSAncestorIndex]],requiredModule.[[DFSAncestorIndex]]).
      4. Else,
        1. SetrequiredModule torequiredModule.[[CycleRoot]].
        2. Assert:requiredModule.[[Status]] is eitherevaluating-async orevaluated.
        3. IfrequiredModule.[[EvaluationError]] is notempty, return ? requiredModule.[[EvaluationError]].
      5. IfrequiredModule.[[AsyncEvaluationOrder]] is aninteger, then
        1. Setmodule.[[PendingAsyncDependencies]] tomodule.[[PendingAsyncDependencies]] + 1.
        2. Appendmodule torequiredModule.[[AsyncParentModules]].
  12. Ifmodule.[[PendingAsyncDependencies]] > 0 ormodule.[[HasTLA]] istrue, then
    1. Assert:module.[[AsyncEvaluationOrder]] isunset.
    2. Setmodule.[[AsyncEvaluationOrder]] toIncrementModuleAsyncEvaluationCount().
    3. Ifmodule.[[PendingAsyncDependencies]] = 0, performExecuteAsyncModule(module).
  13. Else,
    1. Perform ? module.ExecuteModule().
  14. Assert:module occurs exactly once instack.
  15. Assert:module.[[DFSAncestorIndex]]moduleIndex.
  16. Ifmodule.[[DFSAncestorIndex]] =moduleIndex, then
    1. Letdone befalse.
    2. Repeat, whiledone isfalse,
      1. LetrequiredModule be the last element ofstack.
      2. Remove the last element ofstack.
      3. Assert:requiredModule is aCyclic Module Record.
      4. Assert:requiredModule.[[AsyncEvaluationOrder]] is either aninteger orunset.
      5. IfrequiredModule.[[AsyncEvaluationOrder]] isunset, setrequiredModule.[[Status]] toevaluated.
      6. Otherwise, setrequiredModule.[[Status]] toevaluating-async.
      7. IfrequiredModule andmodule are the sameModule Record, setdone totrue.
      8. SetrequiredModule.[[CycleRoot]] tomodule.
  17. Returnindex.
Note 1

A module isevaluating while it is being traversed by InnerModuleEvaluation. A module isevaluated on execution completion orevaluating-async during execution if its[[HasTLA]] field istrue or if it has asynchronous dependencies.

Note 2

Any modules depending on a module of an asynchronous cycle when that cycle is notevaluating will instead depend on the execution of the root of the cycle via[[CycleRoot]]. This ensures that the cycle state can be treated as a single strongly connected component through its root module state.

16.2.1.6.1.3.2 ExecuteAsyncModule (module )

The abstract operation ExecuteAsyncModule takes argumentmodule (aCyclic Module Record) and returnsunused. It performs the following steps when called:

  1. Assert:module.[[Status]] is eitherevaluating orevaluating-async.
  2. Assert:module.[[HasTLA]] istrue.
  3. Letcapability be ! NewPromiseCapability(%Promise%).
  4. LetfulfilledClosure be a newAbstract Closure with no parameters that capturesmodule and performs the following steps when called:
    1. PerformAsyncModuleExecutionFulfilled(module).
    2. ReturnNormalCompletion(undefined).
  5. LetonFulfilled beCreateBuiltinFunction(fulfilledClosure, 0,"", « »).
  6. LetrejectedClosure be a newAbstract Closure with parameters (error) that capturesmodule and performs the following steps when called:
    1. PerformAsyncModuleExecutionRejected(module,error).
    2. ReturnNormalCompletion(undefined).
  7. LetonRejected beCreateBuiltinFunction(rejectedClosure, 0,"", « »).
  8. PerformPerformPromiseThen(capability.[[Promise]],onFulfilled,onRejected).
  9. Perform ! module.ExecuteModule(capability).
  10. Returnunused.

16.2.1.6.1.3.3 GatherAvailableAncestors (module,execList )

The abstract operation GatherAvailableAncestors takes argumentsmodule (aCyclic Module Record) andexecList (aList ofCyclic Module Records) and returnsunused. It performs the following steps when called:

  1. For eachCyclic Module Recordm ofmodule.[[AsyncParentModules]], do
    1. IfexecList does not containm andm.[[CycleRoot]].[[EvaluationError]] isempty, then
      1. Assert:m.[[Status]] isevaluating-async.
      2. Assert:m.[[EvaluationError]] isempty.
      3. Assert:m.[[AsyncEvaluationOrder]] is aninteger.
      4. Assert:m.[[PendingAsyncDependencies]] > 0.
      5. Setm.[[PendingAsyncDependencies]] tom.[[PendingAsyncDependencies]] - 1.
      6. Ifm.[[PendingAsyncDependencies]] = 0, then
        1. Appendm toexecList.
        2. Ifm.[[HasTLA]] isfalse, performGatherAvailableAncestors(m,execList).
  2. Returnunused.
Note

When an asynchronous execution for a rootmodule is fulfilled, this function determines the list of modules which are able to synchronously execute together on this completion, populating them inexecList.

16.2.1.6.1.3.4 AsyncModuleExecutionFulfilled (module )

The abstract operation AsyncModuleExecutionFulfilled takes argumentmodule (aCyclic Module Record) and returnsunused. It performs the following steps when called:

  1. Ifmodule.[[Status]] isevaluated, then
    1. Assert:module.[[EvaluationError]] is notempty.
    2. Returnunused.
  2. Assert:module.[[Status]] isevaluating-async.
  3. Assert:module.[[AsyncEvaluationOrder]] is aninteger.
  4. Assert:module.[[EvaluationError]] isempty.
  5. Setmodule.[[AsyncEvaluationOrder]] todone.
  6. Setmodule.[[Status]] toevaluated.
  7. Ifmodule.[[TopLevelCapability]] is notempty, then
    1. Assert:module.[[CycleRoot]] andmodule are the sameModule Record.
    2. Perform ! Call(module.[[TopLevelCapability]].[[Resolve]],undefined, «undefined »).
  8. LetexecList be a new emptyList.
  9. PerformGatherAvailableAncestors(module,execList).
  10. Assert: All elements ofexecList have their[[AsyncEvaluationOrder]] field set to aninteger,[[PendingAsyncDependencies]] field set to 0, and[[EvaluationError]] field set toempty.
  11. LetsortedExecList be aList whose elements are the elements ofexecList, sorted by their[[AsyncEvaluationOrder]] field in ascending order.
  12. For eachCyclic Module Recordm ofsortedExecList, do
    1. Ifm.[[Status]] isevaluated, then
      1. Assert:m.[[EvaluationError]] is notempty.
    2. Else ifm.[[HasTLA]] istrue, then
      1. PerformExecuteAsyncModule(m).
    3. Else,
      1. Letresult bem.ExecuteModule().
      2. Ifresult is anabrupt completion, then
        1. PerformAsyncModuleExecutionRejected(m,result.[[Value]]).
      3. Else,
        1. Setm.[[AsyncEvaluationOrder]] todone.
        2. Setm.[[Status]] toevaluated.
        3. Ifm.[[TopLevelCapability]] is notempty, then
          1. Assert:m.[[CycleRoot]] andm are the sameModule Record.
          2. Perform ! Call(m.[[TopLevelCapability]].[[Resolve]],undefined, «undefined »).
  13. Returnunused.

16.2.1.6.1.3.5 AsyncModuleExecutionRejected (module,error )

The abstract operation AsyncModuleExecutionRejected takes argumentsmodule (aCyclic Module Record) anderror (anECMAScript language value) and returnsunused. It performs the following steps when called:

  1. Ifmodule.[[Status]] isevaluated, then
    1. Assert:module.[[EvaluationError]] is notempty.
    2. Returnunused.
  2. Assert:module.[[Status]] isevaluating-async.
  3. Assert:module.[[AsyncEvaluationOrder]] is aninteger.
  4. Assert:module.[[EvaluationError]] isempty.
  5. Setmodule.[[EvaluationError]] toThrowCompletion(error).
  6. Setmodule.[[Status]] toevaluated.
  7. Setmodule.[[AsyncEvaluationOrder]] todone.
  8. NOTE:module.[[AsyncEvaluationOrder]] is set todone for symmetry withAsyncModuleExecutionFulfilled. InInnerModuleEvaluation, the value of a module's[[AsyncEvaluationOrder]] internal slot is unused when its[[EvaluationError]] internal slot is notempty.
  9. For eachCyclic Module Recordm ofmodule.[[AsyncParentModules]], do
    1. PerformAsyncModuleExecutionRejected(m,error).
  10. Ifmodule.[[TopLevelCapability]] is notempty, then
    1. Assert:module.[[CycleRoot]] andmodule are the sameModule Record.
    2. Perform ! Call(module.[[TopLevelCapability]].[[Reject]],undefined, «error »).
  11. Returnunused.

16.2.1.6.2 Example Cyclic Module Record Graphs

This non-normative section gives a series of examples of the linking and evaluation of a few common module graphs, with a specific focus on how errors can occur.

First consider the following simple module graph:

Figure 2: A simple module graph
A module graph in which module A depends on module B, and module B depends on module C

Let's first assume that there are no error conditions. When ahost first callsA.LoadRequestedModules(), this will complete successfully by assumption, and recursively load the dependencies ofB andC as well (respectively,C and none), and then setA.[[Status]] =B.[[Status]] =C.[[Status]] =unlinked. Then, when thehost callsA.Link(), it will complete successfully (again by assumption) such thatA.[[Status]] =B.[[Status]] =C.[[Status]] =linked. These preparatory steps can be performed at any time. Later, when thehost is ready to incur any possible side effects of the modules, it can callA.Evaluate(), which will complete successfully, returning a Promise resolving toundefined (again by assumption), recursively having evaluated firstC and thenB. Each module's[[Status]] at this point will beevaluated.

Consider then cases involving linking errors, after a successful call toA.LoadRequestedModules(). IfInnerModuleLinking ofC succeeds but, thereafter, fails forB, for example because it imports something thatC does not provide, then the originalA.Link() will fail, and bothA andB's[[Status]] remainunlinked.C's[[Status]] has becomelinked, though.

Finally, consider a case involving evaluation errors after a successful call to Link(). IfInnerModuleEvaluation ofC succeeds but, thereafter, fails forB, for example becauseB contains code that throws an exception, then the originalA.Evaluate() will fail, returning a rejected Promise. The resulting exception will be recorded in bothA andB's[[EvaluationError]] fields, and their[[Status]] will becomeevaluated.C will also becomeevaluated but, in contrast toA andB, will remain without an[[EvaluationError]], as it successfully completed evaluation. Storing the exception ensures that any time ahost tries to reuseA orB by calling their Evaluate() method, it will encounter the same exception. (Hosts are not required to reuseCyclic Module Records; similarly,hosts are not required to expose the exception objects thrown by these methods. However, the specification enables such uses.)

Now consider a different type of error condition:

Figure 3: A module graph with an unresolvable module
A module graph in which module A depends on a missing (unresolvable) module, represented by ???

In this scenario, moduleA declares a dependency on some other module, but noModule Record exists for that module, i.e.HostLoadImportedModule callsFinishLoadingImportedModule with an exception when asked for it. This could occur for a variety of reasons, such as the corresponding resource not existing, or the resource existing butParseModule returning some errors when trying to parse the resulting source text.Hosts can choose to expose the cause of failure via the completion they pass toFinishLoadingImportedModule. In any case, this exception causes a loading failure, which results inA's[[Status]] remainingnew.

The difference here between loading, linking and evaluation errors is due to the following characteristic:

  • Evaluation must be only performed once, as it can cause side effects; it is thus important to remember whether evaluation has already been performed, even if unsuccessfully. (In the error case, it makes sense to also remember the exception because otherwise subsequent Evaluate() calls would have to synthesize a new one.)
  • Linking, on the other hand, is side-effect-free, and thus even if it fails, it can be retried at a later time with no issues.
  • Loading closely interacts with thehost, and it may be desirable for some of them to allow users to retry failed loads (for example, if the failure is caused by temporarily bad network conditions).

Now, consider a module graph with a cycle:

Figure 4: A cyclic module graph
A module graph in which module A depends on module B and C, but module B also depends on module A

Here we assume that the entry point is moduleA, so that thehost proceeds by callingA.LoadRequestedModules(), which performsInnerModuleLoading onA. This in turn callsInnerModuleLoading onB andC. Because of the cycle, this again triggersInnerModuleLoading onA, but at this point it is a no-op sinceA's dependencies loading has already been triggered during this LoadRequestedModules process. When all the modules in the graph have been successfully loaded, their[[Status]] transitions fromnew tounlinked at the same time.

Then thehost proceeds by callingA.Link(), which performsInnerModuleLinking onA. This in turn callsInnerModuleLinking onB. Because of the cycle, this again triggersInnerModuleLinking onA, but at this point it is a no-op sinceA.[[Status]] is alreadylinking.B.[[Status]] itself remainslinking when control gets back toA andInnerModuleLinking is triggered onC. After this returns withC.[[Status]] beinglinked, bothA andB transition fromlinking tolinked together; this is by design, since they form a strongly connected component. It's possible to transition the status of modules in the same SCC at the same time because during this phase the module graph is traversed with a depth-first search.

An analogous story occurs for the evaluation phase of a cyclic module graph, in the success case.

Now consider a case whereA has a linking error; for example, it tries to import a binding fromC that does not exist. In that case, the above steps still occur, including the early return from the second call toInnerModuleLinking onA. However, once we unwind back to the originalInnerModuleLinking onA, it fails during InitializeEnvironment, namely right afterC.ResolveExport(). The thrownSyntaxError exception propagates up toA.Link, which resets all modules that are currently on itsstack (these are always exactly the modules that are stilllinking). Hence bothA andB becomeunlinked. Note thatC is left aslinked.

Alternatively, consider a case whereA has an evaluation error; for example, its source code throws an exception. In that case, the evaluation-time analogue of the above steps still occurs, including the early return from the second call toInnerModuleEvaluation onA. However, once we unwind back to the originalInnerModuleEvaluation onA, it fails by assumption. The exception thrown propagates up toA.Evaluate(), which records the error in all modules that are currently on itsstack (i.e., the modules that are stillevaluating) as well as via[[AsyncParentModules]], which form a chain for modules which contain or depend on top-levelawait through the whole dependency graph through theAsyncModuleExecutionRejected algorithm. Hence bothA andB becomeevaluated and the exception is recorded in bothA andB's[[EvaluationError]] fields, whileC is left asevaluated with no[[EvaluationError]].

Lastly, consider a module graph with a cycle, where all modules complete asynchronously:

Figure 5: An asynchronous cyclic module graph
A module graph in which module A depends on module B and C, module B depends on module D, module C depends on module D and E, and module D depends on module A

Loading and linking happen as before, and all modules end up with[[Status]] set tolinked.

CallingA.Evaluate() callsInnerModuleEvaluation onA,B, andD, which all transition toevaluating. ThenInnerModuleEvaluation is called onA again, which is a no-op because it is alreadyevaluating. At this point,D.[[PendingAsyncDependencies]] is 0, soExecuteAsyncModule(D) is called and we callD.ExecuteModule with a new PromiseCapability tracking the asynchronous execution ofD. We unwind back to theInnerModuleEvaluation onB, settingB.[[PendingAsyncDependencies]] to 1 andB.[[AsyncEvaluationOrder]] to 1. We unwind back to the originalInnerModuleEvaluation onA, settingA.[[PendingAsyncDependencies]] to 1. In the next iteration of the loop overA's dependencies, we callInnerModuleEvaluation onC and thus onD (again a no-op) andE. AsE has no dependencies and is not part of a cycle, we callExecuteAsyncModule(E) in the same manner asD andE is immediately removed from the stack. We unwind once more to theInnerModuleEvaluation onC, settingC.[[AsyncEvaluationOrder]] to 3. Now we finish the loop overA's dependencies, setA.[[AsyncEvaluationOrder]] to 4, and remove the entire strongly connected component from the stack, transitioning all of the modules toevaluating-async at once. At this point, the fields of the modules are as given inTable 46.

Table 46: Module fields after the initial Evaluate() call
Field
Module
ABCDE
[[DFSAncestorIndex]]00004
[[Status]]evaluating-asyncevaluating-asyncevaluating-asyncevaluating-asyncevaluating-async
[[AsyncEvaluationOrder]]41302
[[AsyncParentModules]]« »«A »«A »«B,C »«C »
[[PendingAsyncDependencies]]2 (B andC)1 (D)2 (D andE)00

Let us assume thatE finishes executing first. When that happens,AsyncModuleExecutionFulfilled is called,E.[[Status]] is set toevaluated andC.[[PendingAsyncDependencies]] is decremented to become 1. The fields of the updated modules are as given inTable 47.

Table 47: Module fields after moduleE finishes executing
Field
Module
CE
[[DFSAncestorIndex]]04
[[Status]]evaluating-asyncevaluated
[[AsyncEvaluationOrder]]3done
[[AsyncParentModules]]«A »«C »
[[PendingAsyncDependencies]]1 (D)0

D is next to finish (as it was the only module that was still executing). When that happens,AsyncModuleExecutionFulfilled is called again andD.[[Status]] is set toevaluated. Its ancestors available for execution areB (whose[[AsyncEvaluationOrder]] is 1) andC (whose[[AsyncEvaluationOrder]] is 3), thusB will be handled first:B.[[PendingAsyncDependencies]] is decremented to become 0,ExecuteAsyncModule is called onB, and it starts executing.C.[[PendingAsyncDependencies]] is also decremented to become 0, andC starts executing (potentially in parallel toB ifB contains anawait). The fields of the updated modules are as given inTable 48.

Table 48: Module fields after moduleD finishes executing
Field
Module
BCD
[[DFSAncestorIndex]]000
[[Status]]evaluating-asyncevaluating-asyncevaluated
[[AsyncEvaluationOrder]]13done
[[AsyncParentModules]]«A »«A »«B,C »
[[PendingAsyncDependencies]]000

Let us assume thatC finishes executing next. When that happens,AsyncModuleExecutionFulfilled is called again,C.[[Status]] is set toevaluated andA.[[PendingAsyncDependencies]] is decremented to become 1. The fields of the updated modules are as given inTable 49.

Table 49: Module fields after moduleC finishes executing
Field
Module
AC
[[DFSAncestorIndex]]00
[[Status]]evaluating-asyncevaluated
[[AsyncEvaluationOrder]]4done
[[AsyncParentModules]]« »«A »
[[PendingAsyncDependencies]]1 (B)0

Then,B finishes executing. When that happens,AsyncModuleExecutionFulfilled is called again andB.[[Status]] is set toevaluated.A.[[PendingAsyncDependencies]] is decremented to become 0, soExecuteAsyncModule is called and it starts executing. The fields of the updated modules are as given inTable 50.

Table 50: Module fields after moduleB finishes executing
Field
Module
AB
[[DFSAncestorIndex]]00
[[Status]]evaluating-asyncevaluated
[[AsyncEvaluationOrder]]4done
[[AsyncParentModules]]« »«A »
[[PendingAsyncDependencies]]00

Finally,A finishes executing. When that happens,AsyncModuleExecutionFulfilled is called again andA.[[Status]] is set toevaluated. At this point, the Promise inA.[[TopLevelCapability]] (which was returned fromA.Evaluate()) is resolved, and this concludes the handling of this module graph. The fields of the updated module are as given inTable 51.

Table 51: Module fields after moduleA finishes executing
Field
Module
A
[[DFSAncestorIndex]]0
[[Status]]evaluated
[[AsyncEvaluationOrder]]done
[[AsyncParentModules]]« »
[[PendingAsyncDependencies]]0

Alternatively, consider a failure case whereC fails execution and returns an error beforeB has finished executing. When that happens,AsyncModuleExecutionRejected is called, which setsC.[[Status]] toevaluated andC.[[EvaluationError]] to the error. It then propagates this error to all of the AsyncParentModules by performingAsyncModuleExecutionRejected on each of them. The fields of the updated modules are as given inTable 52.

Table 52: Module fields after moduleC finishes with an error
Field
Module
AC
[[DFSAncestorIndex]]00
[[Status]]evaluatedevaluated
[[AsyncEvaluationOrder]]donedone
[[AsyncParentModules]]« »«A »
[[PendingAsyncDependencies]]1 (B)0
[[EvaluationError]]emptyC's evaluation error

A will be rejected with the same error asC sinceC will callAsyncModuleExecutionRejected onA withC's error.A.[[Status]] is set toevaluated. At this point the Promise inA.[[TopLevelCapability]] (which was returned fromA.Evaluate()) is rejected. The fields of the updated module are as given inTable 53.

Table 53: Module fields after moduleA is rejected
Field
Module
A
[[DFSAncestorIndex]]0
[[Status]]evaluated
[[AsyncEvaluationOrder]]done
[[AsyncParentModules]]« »
[[PendingAsyncDependencies]]0
[[EvaluationError]]C'sEvaluation Error

Then,B finishes executing without an error. When that happens,AsyncModuleExecutionFulfilled is called again andB.[[Status]] is set toevaluated.GatherAvailableAncestors is called onB. However,A.[[CycleRoot]] isA which has an evaluation error, so it will not be added to the returnedsortedExecList andAsyncModuleExecutionFulfilled will return without further processing. Any future importer ofB will resolve the rejection ofB.[[CycleRoot]].[[EvaluationError]] from the evaluation error fromC that was set on the cycle rootA. The fields of the updated modules are as given inTable 54.

Table 54: Module fields after moduleB finishes executing in an erroring graph
Field
Module
AB
[[DFSAncestorIndex]]00
[[Status]]evaluatedevaluated
[[AsyncEvaluationOrder]]41
[[AsyncParentModules]]« »«A »
[[PendingAsyncDependencies]]00
[[EvaluationError]]C'sEvaluation Errorempty

16.2.1.7 Source Text Module Records

ASource Text Module Record is used to represent information about a module that was defined fromECMAScript source text (11) that was parsed using thegoal symbolModule. Its fields contain digested information about the names that are imported and exported by the module, and its concrete methods use these digests to link and evaluate the module.

ASource Text Module Record can exist in a module graph with other subclasses of the abstractModule Record type, and can participate in cycles with other subclasses of theCyclic Module Record type.

In addition to the fields defined inTable 43,Source Text Module Records have the additional fields listed inTable 55. Each of these fields is initially set inParseModule.

Table 55: Additional Fields ofSource Text Module Records
Field Name Value Type Meaning
[[ECMAScriptCode]] aParse Node The result of parsing the source text of this module usingModule as thegoal symbol.
[[Context]] anECMAScript code execution context orempty Theexecution context associated with this module. It isempty until the module's environment has been initialized.
[[ImportMeta]] an Object orempty An object exposed through theimport.meta meta property. It isempty until it is accessed by ECMAScript code.
[[ImportEntries]] aList ofImportEntry Records AList of ImportEntry records derived from the code of this module.
[[LocalExportEntries]] aList ofExportEntry Records AList of ExportEntry records derived from the code of this module that correspond to declarations that occur within the module.
[[IndirectExportEntries]] aList ofExportEntry Records AList of ExportEntry records derived from the code of this module that correspond to reexported imports that occur within the module or exports fromexport * as namespace declarations.
[[StarExportEntries]] aList ofExportEntry Records AList of ExportEntry records derived from the code of this module that correspond toexport * declarations that occur within the module, not includingexport * as namespace declarations.

AnImportEntry Record is aRecord that digests information about a single declarative import. EachImportEntry Record has the fields defined inTable 56:

Table 56:ImportEntry Record Fields
Field Name Value Type Meaning
[[ModuleRequest]] aModuleRequest RecordModuleRequest Record representing theModuleSpecifier and import attributes of theImportDeclaration.
[[ImportName]] a String ornamespace-object The name under which the desired binding is exported by the module identified by[[ModuleRequest]]. The valuenamespace-object indicates that the import request is for the target module's namespace object.
[[LocalName]] a String The name that is used to locally access the imported value from within the importing module.
Note 1

Table 57 gives examples of ImportEntry records fields used to represent the syntactic import forms:

Table 57 (Informative): Import Forms Mappings toImportEntry Records
Import Statement Form[[ModuleRequest]][[ImportName]][[LocalName]]
import v from "mod";"mod""default""v"
import * as ns from "mod";"mod"namespace-object"ns"
import {x} from "mod";"mod""x""x"
import {x as v} from "mod";"mod""x""v"
import "mod"; AnImportEntry Record is not created.

AnExportEntry Record is aRecord that digests information about a single declarative export. EachExportEntry Record has the fields defined inTable 58:

Table 58:ExportEntry Record Fields
Field Name Value Type Meaning
[[ExportName]] a String ornull The name used to export this binding by this module.
[[ModuleRequest]] aModuleRequest Record ornull TheModuleRequest Record representing theModuleSpecifier and import attributes of theExportDeclaration.null if theExportDeclaration does not have aModuleSpecifier.
[[ImportName]] a String,null,all, orall-but-default The name under which the desired binding is exported by the module identified by[[ModuleRequest]].null if theExportDeclaration does not have aModuleSpecifier.all is used forexport * as ns from "mod" declarations.all-but-default is used forexport * from "mod" declarations.
[[LocalName]] a String ornull The name that is used to locally access the exported value from within the importing module.null if the exported value is not locally accessible from within the module.
Note 2

Table 59 gives examples of the ExportEntry record fields used to represent the syntactic export forms:

Table 59 (Informative): Export Forms Mappings toExportEntry Records
Export Statement Form[[ExportName]][[ModuleRequest]][[ImportName]][[LocalName]]
export var v;"v"nullnull"v"
export default function f() {}"default"nullnull"f"
export default function () {}"default"nullnull"*default*"
export default 42;"default"nullnull"*default*"
export {x};"x"nullnull"x"
export {v as x};"x"nullnull"v"
export {x} from "mod";"x""mod""x"null
export {v as x} from "mod";"x""mod""v"null
export * from "mod";null"mod"all-but-defaultnull
export * as ns from "mod";"ns""mod"allnull

The following definitions specify the required concrete methods and otherabstract operations forSource Text Module Records

16.2.1.7.1 ParseModule (sourceText,realm,hostDefined )

The abstract operation ParseModule takes argumentssourceText (ECMAScript source text),realm (aRealm Record), andhostDefined (anything) and returns aSource Text Module Record or a non-emptyList ofSyntaxError objects. It creates aSource Text Module Record based upon the result of parsingsourceText as aModule. It performs the following steps when called:

  1. Letbody beParseText(sourceText,Module).
  2. Ifbody is aList of errors, returnbody.
  3. LetrequestedModules be theModuleRequests ofbody.
  4. LetimportEntries be theImportEntries ofbody.
  5. LetimportedBoundNames beImportedLocalNames(importEntries).
  6. LetindirectExportEntries be a new emptyList.
  7. LetlocalExportEntries be a new emptyList.
  8. LetstarExportEntries be a new emptyList.
  9. LetexportEntries be theExportEntries ofbody.
  10. For eachExportEntry Recordee ofexportEntries, do
    1. Ifee.[[ModuleRequest]] isnull, then
      1. IfimportedBoundNames does not containee.[[LocalName]], then
        1. Appendee tolocalExportEntries.
      2. Else,
        1. Letie be the element ofimportEntries whose[[LocalName]] isee.[[LocalName]].
        2. Ifie.[[ImportName]] isnamespace-object, then
          1. NOTE: This is a re-export of an imported module namespace object.
          2. Appendee tolocalExportEntries.
        3. Else,
          1. NOTE: This is a re-export of a single name.
          2. Append theExportEntry Record {[[ModuleRequest]]:ie.[[ModuleRequest]],[[ImportName]]:ie.[[ImportName]],[[LocalName]]:null,[[ExportName]]:ee.[[ExportName]] } toindirectExportEntries.
    2. Else ifee.[[ImportName]] isall-but-default, then
      1. Assert:ee.[[ExportName]] isnull.
      2. Appendee tostarExportEntries.
    3. Else,
      1. Appendee toindirectExportEntries.
  11. Letasync bebodyContainsawait.
  12. ReturnSource Text Module Record {[[Realm]]:realm,[[Environment]]:empty,[[Namespace]]:empty,[[CycleRoot]]:empty,[[HasTLA]]:async,[[AsyncEvaluationOrder]]:unset,[[TopLevelCapability]]:empty,[[AsyncParentModules]]: « »,[[PendingAsyncDependencies]]:empty,[[Status]]:new,[[EvaluationError]]:empty,[[HostDefined]]:hostDefined,[[ECMAScriptCode]]:body,[[Context]]:empty,[[ImportMeta]]:empty,[[RequestedModules]]:requestedModules,[[LoadedModules]]: « »,[[ImportEntries]]:importEntries,[[LocalExportEntries]]:localExportEntries,[[IndirectExportEntries]]:indirectExportEntries,[[StarExportEntries]]:starExportEntries,[[DFSAncestorIndex]]:empty }.
Note

An implementation may parse module source text and analyse it for Early Error conditions prior to the evaluation of ParseModule for that module source text. However, the reporting of any errors must be deferred until the point where this specification actually performs ParseModule upon that source text.

16.2.1.7.2 Implementation of Module Record Abstract Methods

The following are the concrete methods forSource Text Module Record that implement the correspondingModule Record abstract methods defined inTable 42.

16.2.1.7.2.1 GetExportedNames ( [exportStarSet ] )

The GetExportedNames concrete method of aSource Text Module Recordmodule takes optional argumentexportStarSet (aList ofSource Text Module Records) and returns aList of Strings. It performs the following steps when called:

  1. Assert:module.[[Status]] is notnew.
  2. IfexportStarSet is not present, setexportStarSet to a new emptyList.
  3. IfexportStarSet containsmodule, then
    1. Assert: We've reached the starting point of anexport * circularity.
    2. Return a new emptyList.
  4. Appendmodule toexportStarSet.
  5. LetexportedNames be a new emptyList.
  6. For eachExportEntry Recorde ofmodule.[[LocalExportEntries]], do
    1. Assert:module provides the direct binding for this export.
    2. Assert:e.[[ExportName]] is notnull.
    3. Appende.[[ExportName]] toexportedNames.
  7. For eachExportEntry Recorde ofmodule.[[IndirectExportEntries]], do
    1. Assert:module imports a specific binding for this export.
    2. Assert:e.[[ExportName]] is notnull.
    3. Appende.[[ExportName]] toexportedNames.
  8. For eachExportEntry Recorde ofmodule.[[StarExportEntries]], do
    1. Assert:e.[[ModuleRequest]] is notnull.
    2. LetrequestedModule beGetImportedModule(module,e.[[ModuleRequest]]).
    3. LetstarNames berequestedModule.GetExportedNames(exportStarSet).
    4. For each elementn ofstarNames, do
      1. Ifn is not"default", then
        1. IfexportedNames does not containn, then
          1. Appendn toexportedNames.
  9. ReturnexportedNames.
Note

GetExportedNames does not filter out or throw an exception for names that have ambiguous star export bindings.

16.2.1.7.2.2 ResolveExport (exportName [ ,resolveSet ] )

The ResolveExport concrete method of aSource Text Module Recordmodule takes argumentexportName (a String) and optional argumentresolveSet (aList ofRecords with fields[[Module]] (aModule Record) and[[ExportName]] (a String)) and returns aResolvedBinding Record,null, orambiguous.

ResolveExport attempts to resolve an imported binding to the actual defining module and local binding name. The defining module may be the module represented by theModule Record this method was invoked on or some other module that is imported by that module. The parameterresolveSet is used to detect unresolved circular import/export paths. If a pair consisting of specificModule Record andexportName is reached that is already inresolveSet, an import circularity has been encountered. Before recursively calling ResolveExport, a pair consisting ofmodule andexportName is added toresolveSet.

If a defining module is found, aResolvedBinding Record {[[Module]],[[BindingName]] } is returned. This record identifies the resolved binding of the originally requested export, unless this is the export of a namespace with no local binding. In this case,[[BindingName]] will be set tonamespace. If no definition was found or the request is found to be circular,null is returned. If the request is found to be ambiguous,ambiguous is returned.

It performs the following steps when called:

  1. Assert:module.[[Status]] is notnew.
  2. IfresolveSet is not present, setresolveSet to a new emptyList.
  3. For eachRecord {[[Module]],[[ExportName]] }r ofresolveSet, do
    1. Ifmodule andr.[[Module]] are the sameModule Record andexportName isr.[[ExportName]], then
      1. Assert: This is a circular import request.
      2. Returnnull.
  4. Append theRecord {[[Module]]:module,[[ExportName]]:exportName } toresolveSet.
  5. For eachExportEntry Recorde ofmodule.[[LocalExportEntries]], do
    1. Ife.[[ExportName]] isexportName, then
      1. Assert:module provides the direct binding for this export.
      2. ReturnResolvedBinding Record {[[Module]]:module,[[BindingName]]:e.[[LocalName]] }.
  6. For eachExportEntry Recorde ofmodule.[[IndirectExportEntries]], do
    1. Ife.[[ExportName]] isexportName, then
      1. Assert:e.[[ModuleRequest]] is notnull.
      2. LetimportedModule beGetImportedModule(module,e.[[ModuleRequest]]).
      3. Ife.[[ImportName]] isall, then
        1. Assert:module does not provide the direct binding for this export.
        2. ReturnResolvedBinding Record {[[Module]]:importedModule,[[BindingName]]:namespace }.
      4. Else,
        1. Assert:module imports a specific binding for this export.
        2. Assert:e.[[ImportName]]is a String.
        3. ReturnimportedModule.ResolveExport(e.[[ImportName]],resolveSet).
  7. IfexportName is"default", then
    1. Assert: Adefault export was not explicitly defined by this module.
    2. Returnnull.
    3. NOTE: Adefault export cannot be provided by anexport * from "mod" declaration.
  8. LetstarResolution benull.
  9. For eachExportEntry Recorde ofmodule.[[StarExportEntries]], do
    1. Assert:e.[[ModuleRequest]] is notnull.
    2. LetimportedModule beGetImportedModule(module,e.[[ModuleRequest]]).
    3. Letresolution beimportedModule.ResolveExport(exportName,resolveSet).
    4. Ifresolution isambiguous, returnambiguous.
    5. Ifresolution is notnull, then
      1. Assert:resolution is aResolvedBinding Record.
      2. IfstarResolution isnull, then
        1. SetstarResolution toresolution.
      3. Else,
        1. Assert: There is more than one* import that includes the requested name.
        2. Ifresolution.[[Module]] andstarResolution.[[Module]] are not the sameModule Record, returnambiguous.
        3. Ifresolution.[[BindingName]] is notstarResolution.[[BindingName]] and eitherresolution.[[BindingName]] orstarResolution.[[BindingName]] isnamespace, returnambiguous.
        4. Ifresolution.[[BindingName]]is a String,starResolution.[[BindingName]]is a String, andresolution.[[BindingName]] is notstarResolution.[[BindingName]], returnambiguous.
  10. ReturnstarResolution.

16.2.1.7.3 Implementation of Cyclic Module Record Abstract Methods

The following are the concrete methods forSource Text Module Record that implement the correspondingCyclic Module Record abstract methods defined inTable 44.

16.2.1.7.3.1 InitializeEnvironment ( )

The InitializeEnvironment concrete method of aSource Text Module Recordmodule takes no arguments and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. For eachExportEntry Recorde ofmodule.[[IndirectExportEntries]], do
    1. Assert:e.[[ExportName]] is notnull.
    2. Letresolution bemodule.ResolveExport(e.[[ExportName]]).
    3. Ifresolution is eithernull orambiguous, throw aSyntaxError exception.
    4. Assert:resolution is aResolvedBinding Record.
  2. Assert: All named exports frommodule are resolvable.
  3. Letrealm bemodule.[[Realm]].
  4. Assert:realm is notundefined.
  5. Letenv beNewModuleEnvironment(realm.[[GlobalEnv]]).
  6. Setmodule.[[Environment]] toenv.
  7. For eachImportEntry Recordin ofmodule.[[ImportEntries]], do
    1. LetimportedModule beGetImportedModule(module,in.[[ModuleRequest]]).
    2. Ifin.[[ImportName]] isnamespace-object, then
      1. Letnamespace beGetModuleNamespace(importedModule).
      2. Perform ! env.CreateImmutableBinding(in.[[LocalName]],true).
      3. Perform ! env.InitializeBinding(in.[[LocalName]],namespace).
    3. Else,
      1. Letresolution beimportedModule.ResolveExport(in.[[ImportName]]).
      2. Ifresolution is eithernull orambiguous, throw aSyntaxError exception.
      3. Ifresolution.[[BindingName]] isnamespace, then
        1. Letnamespace beGetModuleNamespace(resolution.[[Module]]).
        2. Perform ! env.CreateImmutableBinding(in.[[LocalName]],true).
        3. Perform ! env.InitializeBinding(in.[[LocalName]],namespace).
      4. Else,
        1. PerformCreateImportBinding(env,in.[[LocalName]],resolution.[[Module]],resolution.[[BindingName]]).
  8. LetmoduleContext be a newECMAScript code execution context.
  9. Set the Function ofmoduleContext tonull.
  10. Assert:module.[[Realm]] is notundefined.
  11. Set theRealm ofmoduleContext tomodule.[[Realm]].
  12. Set the ScriptOrModule ofmoduleContext tomodule.
  13. Set the VariableEnvironment ofmoduleContext tomodule.[[Environment]].
  14. Set the LexicalEnvironment ofmoduleContext tomodule.[[Environment]].
  15. Set the PrivateEnvironment ofmoduleContext tonull.
  16. Setmodule.[[Context]] tomoduleContext.
  17. PushmoduleContext onto theexecution context stack;moduleContext is now therunning execution context.
  18. Letcode bemodule.[[ECMAScriptCode]].
  19. LetvarDeclarations be theVarScopedDeclarations ofcode.
  20. LetdeclaredVarNames be a new emptyList.
  21. For each elementd ofvarDeclarations, do
    1. For each elementdn of theBoundNames ofd, do
      1. IfdeclaredVarNames does not containdn, then
        1. Perform ! env.CreateMutableBinding(dn,false).
        2. Perform ! env.InitializeBinding(dn,undefined).
        3. Appenddn todeclaredVarNames.
  22. LetlexDeclarations be theLexicallyScopedDeclarations ofcode.
  23. LetprivateEnv benull.
  24. For each elementd oflexDeclarations, do
    1. For each elementdn of theBoundNames ofd, do
      1. IfIsConstantDeclaration ofd istrue, then
        1. Perform ! env.CreateImmutableBinding(dn,true).
      2. Else,
        1. Perform ! env.CreateMutableBinding(dn,false).
      3. Ifd is either aFunctionDeclaration, aGeneratorDeclaration, anAsyncFunctionDeclaration, or anAsyncGeneratorDeclaration, then
        1. Letfo beInstantiateFunctionObject ofd with argumentsenv andprivateEnv.
        2. Perform ! env.InitializeBinding(dn,fo).
  25. RemovemoduleContext from theexecution context stack.
  26. Returnunused.

16.2.1.7.3.2 ExecuteModule ( [capability ] )

The ExecuteModule concrete method of aSource Text Module Recordmodule takes optional argumentcapability (aPromiseCapability Record) and returns either anormal completion containingunused or athrow completion. It performs the following steps when called:

  1. LetmoduleContext be a newECMAScript code execution context.
  2. Set the Function ofmoduleContext tonull.
  3. Set theRealm ofmoduleContext tomodule.[[Realm]].
  4. Set the ScriptOrModule ofmoduleContext tomodule.
  5. Assert:module has been linked and declarations in its module environment have been instantiated.
  6. Set the VariableEnvironment ofmoduleContext tomodule.[[Environment]].
  7. Set the LexicalEnvironment ofmoduleContext tomodule.[[Environment]].
  8. Suspend therunning execution context.
  9. Ifmodule.[[HasTLA]] isfalse, then
    1. Assert:capability is not present.
    2. PushmoduleContext onto theexecution context stack;moduleContext is now therunning execution context.
    3. Letresult beCompletion(Evaluation ofmodule.[[ECMAScriptCode]]).
    4. SuspendmoduleContext and remove it from theexecution context stack.
    5. Resume the context that is now on the top of theexecution context stack as therunning execution context.
    6. Ifresult is anabrupt completion, then
      1. Return ? result.
  10. Else,
    1. Assert:capability is aPromiseCapability Record.
    2. PerformAsyncBlockStart(capability,module.[[ECMAScriptCode]],moduleContext).
  11. Returnunused.

16.2.1.8 Synthetic Module Records

ASynthetic Module Record is used to represent information about a module that is defined by specifications. Its exported names are statically defined at creation, while their corresponding values can change over time usingSetSyntheticModuleExport. It has no imports or dependencies.

Note
A Synthetic Module Record could be used for defining a variety of module types: for example, JSON modules or CSS modules.

In addition to the fields defined inTable 41 Synthetic Module Records have the additional fields listed inTable 60.

Table 60: Additional Fields ofSynthetic Module Records
Field NameValue TypeMeaning
[[ExportNames]]aList of StringsThe names of the exports of the module. This list does not contain duplicates.
[[EvaluationSteps]]anAbstract ClosureThe initialization logic to perform upon evaluation of the module, taking theSynthetic Module Record as its sole argument. It must not modify[[ExportNames]]. It may return anabrupt completion.

16.2.1.8.1 CreateDefaultExportSyntheticModule (defaultExport )

The abstract operation CreateDefaultExportSyntheticModule takes argumentdefaultExport (anECMAScript language value) and returns aSynthetic Module Record. It creates aSynthetic Module Record whose default export isdefaultExport. It performs the following steps when called:

  1. Letrealm bethe current Realm Record.
  2. LetsetDefaultExport be a newAbstract Closure with parameters (module) that capturesdefaultExport and performs the following steps when called:
    1. PerformSetSyntheticModuleExport(module,"default",defaultExport).
    2. ReturnNormalCompletion(unused).
  3. Return theSynthetic Module Record {[[Realm]]:realm,[[Environment]]:empty,[[Namespace]]:empty,[[HostDefined]]:undefined,[[ExportNames]]: «"default" »,[[EvaluationSteps]]:setDefaultExport }.

16.2.1.8.2 ParseJSONModule (source )

The abstract operation ParseJSONModule takes argumentsource (a String) and returns either anormal completion containing aSynthetic Module Record, or athrow completion. It performs the following steps when called:

  1. Letjson be ? ParseJSON(source).
  2. ReturnCreateDefaultExportSyntheticModule(json).

16.2.1.8.3 SetSyntheticModuleExport (module,exportName,exportValue )

The abstract operation SetSyntheticModuleExport takes argumentsmodule (aSynthetic Module Record),exportName (a String), andexportValue (anECMAScript language value) and returnsunused. It can be used to set or change the exported value for an existing export of aSynthetic Module Record. It performs the following steps when called:

  1. Assert:module.[[ExportNames]] containsexportName.
  2. LetenvRec bemodule.[[Environment]].
  3. Assert:envRec is notempty.
  4. PerformenvRec.SetMutableBinding(exportName,exportValue,true).
  5. Returnunused.

16.2.1.8.4 Implementation of Module Record Abstract Methods

The following are the concrete methods forSynthetic Module Record that implement the correspondingModule Record abstract methods defined inTable 42.

16.2.1.8.4.1 LoadRequestedModules ( )

The LoadRequestedModules concrete method of aSynthetic Module Recordmodule takes no arguments and returns a Promise. It performs the following steps when called:

  1. Return ! PromiseResolve(%Promise%,undefined).
Note
Synthetic Module Records have no dependencies.

16.2.1.8.4.2 GetExportedNames ( )

The GetExportedNames concrete method of aSynthetic Module Recordmodule takes no arguments and returns aList of Strings. It performs the following steps when called:

  1. Returnmodule.[[ExportNames]].

16.2.1.8.4.3 ResolveExport (exportName )

The ResolveExport concrete method of aSynthetic Module Recordmodule takes argumentexportName (a String) and returns aResolvedBinding Record ornull. It performs the following steps when called:

  1. Ifmodule.[[ExportNames]] does not containexportName, returnnull.
  2. ReturnResolvedBinding Record {[[Module]]:module,[[BindingName]]:exportName }.

16.2.1.8.4.4 Link ( )

The Link concrete method of aSynthetic Module Recordmodule takes no arguments and returns anormal completion containingunused. It performs the following steps when called:

  1. Letrealm bemodule.[[Realm]].
  2. Letenv beNewModuleEnvironment(realm.[[GlobalEnv]]).
  3. Setmodule.[[Environment]] toenv.
  4. For each StringexportName ofmodule.[[ExportNames]], do
    1. Perform ! env.CreateMutableBinding(exportName,false).
    2. Perform ! env.InitializeBinding(exportName,undefined).
  5. ReturnNormalCompletion(unused).

16.2.1.8.4.5 Evaluate ( )

The Evaluate concrete method of aSynthetic Module Recordmodule takes no arguments and returns a Promise. It performs the following steps when called:

  1. LetmoduleContext be a newECMAScript code execution context.
  2. Set the Function ofmoduleContext tonull.
  3. Set theRealm ofmoduleContext tomodule.[[Realm]].
  4. Set the ScriptOrModule ofmoduleContext tomodule.
  5. Set the VariableEnvironment ofmoduleContext tomodule.[[Environment]].
  6. Set the LexicalEnvironment ofmoduleContext tomodule.[[Environment]].
  7. Suspend therunning execution context.
  8. PushmoduleContext onto theexecution context stack;moduleContext is now therunning execution context.
  9. Letsteps bemodule.[[EvaluationSteps]].
  10. Letresult beCompletion(steps(module)).
  11. SuspendmoduleContext and remove it from theexecution context stack.
  12. Resume the context that is now on the top of theexecution context stack as therunning execution context.
  13. Letpc be ! NewPromiseCapability(%Promise%).
  14. IfAbruptRejectPromise(result,pc).
  15. Perform ! Call(pc.[[Resolve]],undefined, «undefined »).
  16. Returnpc.[[Promise]].

16.2.1.9 GetImportedModule (referrer,request )

The abstract operation GetImportedModule takes argumentsreferrer (aCyclic Module Record) andrequest (aModuleRequest Record) and returns aModule Record. It performs the following steps when called:

  1. Letrecords be aList consisting of eachLoadedModuleRequest Recordr ofreferrer.[[LoadedModules]] such thatModuleRequestsEqual(r,request) istrue.
  2. Assert:records has exactly one element, since LoadRequestedModules has completed successfully onreferrer prior to invoking this abstract operation.
  3. Letrecord be the sole element ofrecords.
  4. Returnrecord.[[Module]].

16.2.1.10 HostLoadImportedModule (referrer,moduleRequest,hostDefined,payload )

Thehost-defined abstract operation HostLoadImportedModule takes argumentsreferrer (aScript Record, aCyclic Module Record, or aRealm Record),moduleRequest (aModuleRequest Record),hostDefined (anything), andpayload (aGraphLoadingState Record or aPromiseCapability Record) and returnsunused.

Note 1

An example of whenreferrer can be aRealm Record is in a web browserhost. There, if a user clicks on a control given by

<buttontype="button"onclick="import('./foo.mjs')">Click me</button>

there will be noactive script or module at the time theimport() expression runs. More generally, this can happen in any situation where thehost pushesexecution contexts withnull ScriptOrModule components onto theexecution context stack.

An implementation of HostLoadImportedModule must conform to the following requirements:

The actual process performed ishost-defined, but typically consists of performing whatever I/O operations are necessary to load the appropriateModule Record. Multiple different (referrer,moduleRequest.[[Specifier]],moduleRequest.[[Attributes]]) triples may map to the sameModule Record instance. The actual mapping semantics ishost-defined but typically a normalization process is applied tospecifier as part of the mapping process. A typical normalization process would include actions such as expansion of relative and abbreviated path specifiers.

Note 2

The above text requires thathosts support JSON modules when imported withtype: "json" (and HostLoadImportedModule completes normally), but it does not prohibithosts from supporting JSON modules when imported withouttype: "json".

16.2.1.11 FinishLoadingImportedModule (referrer,moduleRequest,payload,result )

The abstract operation FinishLoadingImportedModule takes argumentsreferrer (aScript Record, aCyclic Module Record, or aRealm Record),moduleRequest (aModuleRequest Record),payload (aGraphLoadingState Record or aPromiseCapability Record), andresult (either anormal completion containing aModule Record or athrow completion) and returnsunused. It performs the following steps when called:

  1. Ifresult is anormal completion, then
    1. Ifreferrer.[[LoadedModules]] contains aLoadedModuleRequest Recordrecord such thatModuleRequestsEqual(record,moduleRequest) istrue, then
      1. Assert:record.[[Module]] andresult.[[Value]] are the sameModule Record.
    2. Else,
      1. Append theLoadedModuleRequest Record {[[Specifier]]:moduleRequest.[[Specifier]],[[Attributes]]:moduleRequest.[[Attributes]],[[Module]]:result.[[Value]] } toreferrer.[[LoadedModules]].
  2. Ifpayload is aGraphLoadingState Record, then
    1. PerformContinueModuleLoading(payload,result).
  3. Else,
    1. PerformContinueDynamicImport(payload,result).
  4. Returnunused.

16.2.1.12 AllImportAttributesSupported (attributes )

The abstract operation AllImportAttributesSupported takes argumentattributes (aList ofImportAttribute Records) and returns a Boolean. It performs the following steps when called:

  1. Letsupported beHostGetSupportedImportAttributes().
  2. For eachImportAttribute Recordattribute ofattributes, do
    1. Ifsupported does not containattribute.[[Key]], returnfalse.
  3. Returntrue.

16.2.1.12.1 HostGetSupportedImportAttributes ( )

Thehost-defined abstract operation HostGetSupportedImportAttributes takes no arguments and returns aList of Strings. It allowshost environments to specify which import attributes they support. Only attributes with supported keys will be provided to thehost.

An implementation of HostGetSupportedImportAttributes must conform to the following requirements:

  • It must return aList of Strings, each indicating a supported attribute.
  • Each time this operation is called, it must return the sameList with the same contents in the same order.

The default implementation of HostGetSupportedImportAttributes is to return a new emptyList.

Note
The purpose of requiring thehost to specify its supported import attributes, rather than passing all attributes to thehost and letting it then choose which ones it wants to handle, is to ensure that unsupported attributes are handled in a consistent way across differenthosts.

16.2.1.13 GetModuleNamespace (module )

The abstract operation GetModuleNamespace takes argumentmodule (an instance of a concrete subclass ofModule Record) and returns a Module Namespace Object. It retrieves the Module Namespace Object representingmodule's exports, lazily creating it the first time it was requested, and storing it inmodule.[[Namespace]] for future retrieval. It performs the following steps when called:

  1. Assert: Ifmodule is aCyclic Module Record, thenmodule.[[Status]] is notnew orunlinked.
  2. Letnamespace bemodule.[[Namespace]].
  3. Ifnamespace isempty, then
    1. LetexportedNames bemodule.GetExportedNames().
    2. LetunambiguousNames be a new emptyList.
    3. For each elementname ofexportedNames, do
      1. Letresolution bemodule.ResolveExport(name).
      2. Ifresolution is aResolvedBinding Record, appendname tounambiguousNames.
    4. Setnamespace toModuleNamespaceCreate(module,unambiguousNames).
  4. Returnnamespace.
Note

GetModuleNamespace never throws. Instead, unresolvable names are simply excluded from the namespace at this point. They will lead to a real linking error later unless they are all ambiguous star exports that are not explicitly requested anywhere.

16.2.1.14 Runtime Semantics: Evaluation

Module:[empty]
  1. Returnundefined.
ModuleBody:ModuleItemList
  1. Letresult beCompletion(Evaluation ofModuleItemList).
  2. Ifresult is anormal completion andresult.[[Value]] isempty, then
    1. Returnundefined.
  3. Return ? result.
ModuleItemList:ModuleItemListModuleItem
  1. Letsl be ? Evaluation ofModuleItemList.
  2. Lets beCompletion(Evaluation ofModuleItem).
  3. Return ? UpdateEmpty(s,sl).
Note

The value of aModuleItemList is the value of the last value-producing item in theModuleItemList.

ModuleItem:ImportDeclaration
  1. Returnempty.

16.2.2 Imports

Syntax

ImportDeclaration:importImportClauseFromClauseWithClauseopt;importModuleSpecifierWithClauseopt;ImportClause:ImportedDefaultBindingNameSpaceImportNamedImportsImportedDefaultBinding,NameSpaceImportImportedDefaultBinding,NamedImportsImportedDefaultBinding:ImportedBindingNameSpaceImport:*asImportedBindingNamedImports:{}{ImportsList}{ImportsList,}FromClause:fromModuleSpecifierImportsList:ImportSpecifierImportsList,ImportSpecifierImportSpecifier:ImportedBindingModuleExportNameasImportedBindingModuleSpecifier:StringLiteralImportedBinding:BindingIdentifier[~Yield, +Await]WithClause:with{}with{WithEntries,opt}WithEntries:AttributeKey:StringLiteralAttributeKey:StringLiteral,WithEntriesAttributeKey:IdentifierNameStringLiteral

16.2.2.1 Static Semantics: Early Errors

ModuleItem:ImportDeclarationWithClause:with{WithEntries,opt}

16.2.2.2 Static Semantics: ImportEntries

Thesyntax-directed operation ImportEntries takes no arguments and returns aList ofImportEntry Records. It is defined piecewise over the following productions:

Module:[empty]
  1. Return a new emptyList.
ModuleItemList:ModuleItemListModuleItem
  1. Letentries1 be theImportEntries ofModuleItemList.
  2. Letentries2 be theImportEntries ofModuleItem.
  3. Return thelist-concatenation ofentries1 andentries2.
ModuleItem:ExportDeclarationStatementListItem
  1. Return a new emptyList.
ImportDeclaration:importImportClauseFromClauseWithClauseopt;
  1. Letmodule be the sole element of theModuleRequests ofImportDeclaration.
  2. Return theImportEntriesForModule ofImportClause with argumentmodule.
ImportDeclaration:importModuleSpecifierWithClauseopt;
  1. Return a new emptyList.

16.2.2.3 Static Semantics: ImportEntriesForModule

Thesyntax-directed operation ImportEntriesForModule takes argumentmodule (aModuleRequest Record) and returns aList ofImportEntry Records. It is defined piecewise over the following productions:

ImportClause:ImportedDefaultBinding,NameSpaceImport
  1. Letentries1 be theImportEntriesForModule ofImportedDefaultBinding with argumentmodule.
  2. Letentries2 be theImportEntriesForModule ofNameSpaceImport with argumentmodule.
  3. Return thelist-concatenation ofentries1 andentries2.
ImportClause:ImportedDefaultBinding,NamedImports
  1. Letentries1 be theImportEntriesForModule ofImportedDefaultBinding with argumentmodule.
  2. Letentries2 be theImportEntriesForModule ofNamedImports with argumentmodule.
  3. Return thelist-concatenation ofentries1 andentries2.
ImportedDefaultBinding:ImportedBinding
  1. LetlocalName be the sole element of theBoundNames ofImportedBinding.
  2. LetdefaultEntry be theImportEntry Record {[[ModuleRequest]]:module,[[ImportName]]:"default",[[LocalName]]:localName }.
  3. Return «defaultEntry ».
NameSpaceImport:*asImportedBinding
  1. LetlocalName be theStringValue ofImportedBinding.
  2. Letentry be theImportEntry Record {[[ModuleRequest]]:module,[[ImportName]]:namespace-object,[[LocalName]]:localName }.
  3. Return «entry ».
NamedImports:{}
  1. Return a new emptyList.
ImportsList:ImportsList,ImportSpecifier
  1. Letspecs1 be theImportEntriesForModule ofImportsList with argumentmodule.
  2. Letspecs2 be theImportEntriesForModule ofImportSpecifier with argumentmodule.
  3. Return thelist-concatenation ofspecs1 andspecs2.
ImportSpecifier:ImportedBinding
  1. LetlocalName be the sole element of theBoundNames ofImportedBinding.
  2. Letentry be theImportEntry Record {[[ModuleRequest]]:module,[[ImportName]]:localName,[[LocalName]]:localName }.
  3. Return «entry ».
ImportSpecifier:ModuleExportNameasImportedBinding
  1. LetimportName be theStringValue ofModuleExportName.
  2. LetlocalName be theStringValue ofImportedBinding.
  3. Letentry be theImportEntry Record {[[ModuleRequest]]:module,[[ImportName]]:importName,[[LocalName]]:localName }.
  4. Return «entry ».

16.2.2.4 Static Semantics: WithClauseToAttributes

Thesyntax-directed operation WithClauseToAttributes takes no arguments and returns aList ofImportAttribute Records. It is defined piecewise over the following productions:

WithClause:with{}
  1. Return a new emptyList.
WithClause:with{WithEntries,opt}
  1. Letattributes beWithClauseToAttributes ofWithEntries.
  2. Sortattributes according to the lexicographic order of their[[Key]] field, treating the value of each such field as a sequence of UTF-16 code unit values. NOTE: This sorting is observable only in thathosts are prohibited from changing behaviour based on the order in which attributes are enumerated.
  3. Returnattributes.
WithEntries:AttributeKey:StringLiteral
  1. Letkey be thePropName ofAttributeKey.
  2. Letentry be theImportAttribute Record {[[Key]]:key,[[Value]]: theSV ofStringLiteral }.
  3. Return «entry ».
WithEntries:AttributeKey:StringLiteral,WithEntries
  1. Letkey be thePropName ofAttributeKey.
  2. Letentry be theImportAttribute Record {[[Key]]:key,[[Value]]: theSV ofStringLiteral }.
  3. Letrest beWithClauseToAttributes ofWithEntries.
  4. Return thelist-concatenation of «entry » andrest.

16.2.3 Exports

Syntax

ExportDeclaration:exportExportFromClauseFromClauseWithClauseopt;exportNamedExports;exportVariableStatement[~Yield, +Await]exportDeclaration[~Yield, +Await]exportdefaultHoistableDeclaration[~Yield, +Await, +Default]exportdefaultClassDeclaration[~Yield, +Await, +Default]exportdefault[lookahead ∉ {function,async[noLineTerminator here]function,class }]AssignmentExpression[+In, ~Yield, +Await];ExportFromClause:**asModuleExportNameNamedExportsNamedExports:{}{ExportsList}{ExportsList,}ExportsList:ExportSpecifierExportsList,ExportSpecifierExportSpecifier:ModuleExportNameModuleExportNameasModuleExportName

16.2.3.1 Static Semantics: Early Errors

ExportDeclaration:exportNamedExports;Note

The above rule means that eachReferencedBindings ofNamedExports is treated as anIdentifierReference.

16.2.3.2 Static Semantics: ExportedBindings

Thesyntax-directed operation ExportedBindings takes no arguments and returns aList of Strings.

Note

ExportedBindings are the locally bound names that are explicitly associated with aModule'sExportedNames.

It is defined piecewise over the following productions:

ModuleItemList:ModuleItemListModuleItem
  1. Letnames1 be theExportedBindings ofModuleItemList.
  2. Letnames2 be theExportedBindings ofModuleItem.
  3. Return thelist-concatenation ofnames1 andnames2.
ModuleItem:ImportDeclarationStatementListItem
  1. Return a new emptyList.
ExportDeclaration:exportExportFromClauseFromClauseWithClauseopt;
  1. Return a new emptyList.
ExportDeclaration:exportNamedExports;
  1. Return theExportedBindings ofNamedExports.
ExportDeclaration:exportVariableStatement
  1. Return theBoundNames ofVariableStatement.
ExportDeclaration:exportDeclaration
  1. Return theBoundNames ofDeclaration.
ExportDeclaration:exportdefaultHoistableDeclarationexportdefaultClassDeclarationexportdefaultAssignmentExpression;
  1. Return theBoundNames of thisExportDeclaration.
NamedExports:{}
  1. Return a new emptyList.
ExportsList:ExportsList,ExportSpecifier
  1. Letnames1 be theExportedBindings ofExportsList.
  2. Letnames2 be theExportedBindings ofExportSpecifier.
  3. Return thelist-concatenation ofnames1 andnames2.
ExportSpecifier:ModuleExportName
  1. Return aList whose sole element is theStringValue ofModuleExportName.
ExportSpecifier:ModuleExportNameasModuleExportName
  1. Return aList whose sole element is theStringValue of the firstModuleExportName.

16.2.3.3 Static Semantics: ExportedNames

Thesyntax-directed operation ExportedNames takes no arguments and returns aList of Strings.

Note

ExportedNames are the externally visible names that aModule explicitly maps to one of its local name bindings.

It is defined piecewise over the following productions:

ModuleItemList:ModuleItemListModuleItem
  1. Letnames1 be theExportedNames ofModuleItemList.
  2. Letnames2 be theExportedNames ofModuleItem.
  3. Return thelist-concatenation ofnames1 andnames2.
ModuleItem:ExportDeclaration
  1. Return theExportedNames ofExportDeclaration.
ModuleItem:ImportDeclarationStatementListItem
  1. Return a new emptyList.
ExportDeclaration:exportExportFromClauseFromClauseWithClauseopt;
  1. Return theExportedNames ofExportFromClause.
ExportFromClause:*
  1. Return a new emptyList.
ExportFromClause:*asModuleExportName
  1. Return aList whose sole element is theStringValue ofModuleExportName.
ExportFromClause:NamedExports
  1. Return theExportedNames ofNamedExports.
ExportDeclaration:exportVariableStatement
  1. Return theBoundNames ofVariableStatement.
ExportDeclaration:exportDeclaration
  1. Return theBoundNames ofDeclaration.
ExportDeclaration:exportdefaultHoistableDeclarationexportdefaultClassDeclarationexportdefaultAssignmentExpression;
  1. Return «"default" ».
NamedExports:{}
  1. Return a new emptyList.
ExportsList:ExportsList,ExportSpecifier
  1. Letnames1 be theExportedNames ofExportsList.
  2. Letnames2 be theExportedNames ofExportSpecifier.
  3. Return thelist-concatenation ofnames1 andnames2.
ExportSpecifier:ModuleExportName
  1. Return aList whose sole element is theStringValue ofModuleExportName.
ExportSpecifier:ModuleExportNameasModuleExportName
  1. Return aList whose sole element is theStringValue of the secondModuleExportName.

16.2.3.4 Static Semantics: ExportEntries

Thesyntax-directed operation ExportEntries takes no arguments and returns aList ofExportEntry Records. It is defined piecewise over the following productions:

Module:[empty]
  1. Return a new emptyList.
ModuleItemList:ModuleItemListModuleItem
  1. Letentries1 be theExportEntries ofModuleItemList.
  2. Letentries2 be theExportEntries ofModuleItem.
  3. Return thelist-concatenation ofentries1 andentries2.
ModuleItem:ImportDeclarationStatementListItem
  1. Return a new emptyList.
ExportDeclaration:exportExportFromClauseFromClauseWithClauseopt;
  1. Letmodule be the sole element of theModuleRequests ofExportDeclaration.
  2. Return theExportEntriesForModule ofExportFromClause with argumentmodule.
ExportDeclaration:exportNamedExports;
  1. Return theExportEntriesForModule ofNamedExports with argumentnull.
ExportDeclaration:exportVariableStatement
  1. Letentries be a new emptyList.
  2. Letnames be theBoundNames ofVariableStatement.
  3. For each elementname ofnames, do
    1. Append theExportEntry Record {[[ModuleRequest]]:null,[[ImportName]]:null,[[LocalName]]:name,[[ExportName]]:name } toentries.
  4. Returnentries.
ExportDeclaration:exportDeclaration
  1. Letentries be a new emptyList.
  2. Letnames be theBoundNames ofDeclaration.
  3. For each elementname ofnames, do
    1. Append theExportEntry Record {[[ModuleRequest]]:null,[[ImportName]]:null,[[LocalName]]:name,[[ExportName]]:name } toentries.
  4. Returnentries.
ExportDeclaration:exportdefaultHoistableDeclaration
  1. Letnames be theBoundNames ofHoistableDeclaration.
  2. LetlocalName be the sole element ofnames.
  3. Return aList whose sole element is a newExportEntry Record {[[ModuleRequest]]:null,[[ImportName]]:null,[[LocalName]]:localName,[[ExportName]]:"default" }.
ExportDeclaration:exportdefaultClassDeclaration
  1. Letnames be theBoundNames ofClassDeclaration.
  2. LetlocalName be the sole element ofnames.
  3. Return aList whose sole element is a newExportEntry Record {[[ModuleRequest]]:null,[[ImportName]]:null,[[LocalName]]:localName,[[ExportName]]:"default" }.
ExportDeclaration:exportdefaultAssignmentExpression;
  1. Letentry be theExportEntry Record {[[ModuleRequest]]:null,[[ImportName]]:null,[[LocalName]]:"*default*",[[ExportName]]:"default" }.
  2. Return «entry ».
Note

"*default*" is used within this specification as a synthetic name for anonymous default export values. Seethis note for more details.

16.2.3.5 Static Semantics: ExportEntriesForModule

Thesyntax-directed operation ExportEntriesForModule takes argumentmodule (aModuleRequest Record ornull) and returns aList ofExportEntry Records. It is defined piecewise over the following productions:

ExportFromClause:*
  1. Letentry be theExportEntry Record {[[ModuleRequest]]:module,[[ImportName]]:all-but-default,[[LocalName]]:null,[[ExportName]]:null }.
  2. Return «entry ».
ExportFromClause:*asModuleExportName
  1. LetexportName be theStringValue ofModuleExportName.
  2. Letentry be theExportEntry Record {[[ModuleRequest]]:module,[[ImportName]]:all,[[LocalName]]:null,[[ExportName]]:exportName }.
  3. Return «entry ».
NamedExports:{}
  1. Return a new emptyList.
ExportsList:ExportsList,ExportSpecifier
  1. Letspecs1 be theExportEntriesForModule ofExportsList with argumentmodule.
  2. Letspecs2 be theExportEntriesForModule ofExportSpecifier with argumentmodule.
  3. Return thelist-concatenation ofspecs1 andspecs2.
ExportSpecifier:ModuleExportName
  1. LetsourceName be theStringValue ofModuleExportName.
  2. Ifmodule isnull, then
    1. LetlocalName besourceName.
    2. LetimportName benull.
  3. Else,
    1. LetlocalName benull.
    2. LetimportName besourceName.
  4. Return aList whose sole element is a newExportEntry Record {[[ModuleRequest]]:module,[[ImportName]]:importName,[[LocalName]]:localName,[[ExportName]]:sourceName }.
ExportSpecifier:ModuleExportNameasModuleExportName
  1. LetsourceName be theStringValue of the firstModuleExportName.
  2. LetexportName be theStringValue of the secondModuleExportName.
  3. Ifmodule isnull, then
    1. LetlocalName besourceName.
    2. LetimportName benull.
  4. Else,
    1. LetlocalName benull.
    2. LetimportName besourceName.
  5. Return aList whose sole element is a newExportEntry Record {[[ModuleRequest]]:module,[[ImportName]]:importName,[[LocalName]]:localName,[[ExportName]]:exportName }.

16.2.3.6 Static Semantics: ReferencedBindings

Thesyntax-directed operation ReferencedBindings takes no arguments and returns aList ofParse Nodes. It is defined piecewise over the following productions:

NamedExports:{}
  1. Return a new emptyList.
ExportsList:ExportsList,ExportSpecifier
  1. Letnames1 be theReferencedBindings ofExportsList.
  2. Letnames2 be theReferencedBindings ofExportSpecifier.
  3. Return thelist-concatenation ofnames1 andnames2.
ExportSpecifier:ModuleExportNameasModuleExportName
  1. Return theReferencedBindings of the firstModuleExportName.
ModuleExportName:IdentifierName
  1. Return aList whose sole element is theIdentifierName.
ModuleExportName:StringLiteral
  1. Return aList whose sole element is theStringLiteral.

16.2.3.7 Runtime Semantics: Evaluation

ExportDeclaration:exportExportFromClauseFromClauseWithClauseopt;exportNamedExports;
  1. Returnempty.
ExportDeclaration:exportVariableStatement
  1. Return ? Evaluation ofVariableStatement.
ExportDeclaration:exportDeclaration
  1. Return ? Evaluation ofDeclaration.
ExportDeclaration:exportdefaultHoistableDeclaration
  1. Return ? Evaluation ofHoistableDeclaration.
ExportDeclaration:exportdefaultClassDeclaration
  1. Letvalue be ? BindingClassDeclarationEvaluation ofClassDeclaration.
  2. LetclassName be the sole element of theBoundNames ofClassDeclaration.
  3. IfclassName is"*default*", then
    1. Letenv be therunning execution context's LexicalEnvironment.
    2. Perform ? InitializeBoundName("*default*",value,env).
  4. Returnempty.
ExportDeclaration:exportdefaultAssignmentExpression;
  1. IfIsAnonymousFunctionDefinition(AssignmentExpression) istrue, then
    1. Letvalue be ? NamedEvaluation ofAssignmentExpression with argument"default".
  2. Else,
    1. Letrhs be ? Evaluation ofAssignmentExpression.
    2. Letvalue be ? GetValue(rhs).
  3. Letenv be therunning execution context's LexicalEnvironment.
  4. Perform ? InitializeBoundName("*default*",value,env).
  5. Returnempty.

[8]ページ先頭

©2009-2025 Movatter.jp