Files
ask262/spec-built/multipage/ecmascript-language-functions-and-classes.html
T
2026-03-26 17:35:36 +05:30

4240 lines
1.1 MiB
Plaintext

<!doctype html><html lang="en-GB-oxendict">
<head><meta name="viewport" content="width=device-width, initial-scale=1"><meta charset="utf-8"><meta property="og:image" content="https://tc39.es/ecmarkup/ecma-logo.png"><meta property="og:title" content="ECMAScript® 2026 Language&nbsp;Specification"><meta property="og:description" content="Introduction
This Ecma Standard defines the ECMAScript 2026 Language. It is the seventeenth edition of the ECMAScript Language Specification. ECMAScript is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript (Microsoft). The language was invent">
<link rel="icon" href="../img/favicon.ico">
<link rel="stylesheet" href="../assets/css/ecmarkup.css"><link rel="stylesheet" href="../assets/css/print.css" media="print"><style>
.unicode-property-table {
table-layout: fixed;
width: 100%;
font-size: 80%;
}
#metadata-block {
margin: 4em 0;
padding: 10px;
border: 1px solid #ee8421;
}
#metadata-block h1 {
font-size: 1.5em;
margin-top: 0;
}
#metadata-block > ul {
list-style-type: none;
margin: 0; padding: 0;
}
#ecma-logo {
width: 500px;
}
.corner-cell {
position: relative;
height: 2lh;
}
.corner-cell .slash {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(to bottom left, transparent calc(50% - 1px), gray, transparent calc(50% + 1px));
}
.corner-cell > .column {
position: absolute;
bottom: 0.4em;
left: 1em;
}
.corner-cell > .row {
position: absolute;
top: 0.4em;
right: 1em;
}
</style>
<style media="print">
/**
* ECMA-262-specific hacks. Shouldn't require a ton of maintenance; audit if
* visual inspection results in unexpected page breaks.
*
* For print version, the table captioned "Module fields after the initial Evaluate() call" _may_ need to set the row
* EVALUATING-ASYNC to one cell with a colspan of 5. It typically does not fit on the page, but the cell merging is
* not a perfectly accurate solution and will not be merged back in to the specification.
* See https://github.com/tc39/ecma262/pull/3623#issuecomment-3029366960
*/
/* Make sure tables are wide enough for their captions */
table {
min-width: 135mm;
}
/* 2.2 Examples of legacy/normative-optional are small enough to be aggressive against breaks */
#sec-conformance [example],
/* 16.2.1.xxx many tables */
#sec-example-cyclic-module-record-graphs table {
break-inside: avoid-page;
}
/* 12.10.1 long note can break wherever it wants */
#sec-rules-of-automatic-semicolon-insertion > emu-note {
break-before: initial;
break-inside: initial;
}
/* 12.10.X Sections start with an <em> not inside a <p> */
#sec-examples-of-automatic-semicolon-insertion > em,
#sec-interesting-cases-of-automatic-semicolon-insertion > em,
#sec-asi-cases-with-no-lineterminator-here > em {
display: block;
margin-top: 1.25ex;
}
/* 15.1.X missing spacing between intro and first emu-grammar */
#sec-static-semantics-containsexpression > emu-grammar:first-of-type {
margin-top: 2ex;
}
/* 15.3 A very long term combined with inline-block, nowrap, and justified text resulting in weird punctuation */
#sec-arrow-function-definitions > p > emu-grammar {
text-align: left;
}
/* 20.X legacy title */
#sec-object\.prototype\.__proto__ > .attributes-tag {
break-before: avoid-page;
break-after: avoid-page;
}
/* 21.X table middle column is too narrow */
#table-time-zone-identifier-record-fields > figure > table th:nth-of-type(2) {
min-width: 19mm;
}
/* 29.X extremely long note */
#sec-shared-memory-guidelines > emu-note {
break-inside: auto;
}
.unicode-property-table {
table-layout: initial;
width: auto;
font-size: 90%;
}
.unicode-property-table th:first-of-type {
width: 33%;
}
.corner-cell {
background-image: url(data:image/svg+xml;base64,PHN2ZyBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaGVpZ2h0PSI0NiIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSIgd2lkdGg9IjI0MiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMzE1LjI2NiAzOTYuMzQzIDI0MS4zOTQgNDUuMTU1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTMxNC45MyAtMzk1LjkzNSkiLz48L3N2Zz4=);
background-repeat: no-repeat;
background-size: 100% 3em;
height: 3em;
padding: 0;
vertical-align: inherit;
position: static;
}
.corner-cell .slash {
display: none;
}
.corner-cell > .column, .corner-cell > .row {
display: block;
position: relative;
}
.corner-cell > .row {
text-align: right;
top: -0.75em
}
.corner-cell > .column {
text-align: left;
bottom: -1.25em;
}
</style>
<title>ECMAScript® 2026 Language&nbsp;Specification</title><script src="../assets/js/multipage.js?cache=Wu2V1pj2" defer=""></script><script src="../assets/js/ecmarkup.js?cache=BPFBckdu" defer=""></script><style>
@media print {
@page :left {
@bottom-right {
content: '© Ecma International 2026';
}
}
@page :right {
@bottom-left {
content: '© Ecma International 2026';
}
}
@page :first {
@bottom-left {
content: '';
}
@bottom-right {
content: '';
}
}
@page :blank {
@bottom-left {
content: '';
}
@bottom-right {
content: '';
}
}
}
</style><style>
@import url("https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/styles/base16/solarized-light.min.css");
@import url("https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.0.1/styles/a11y-dark.min.css") (prefers-color-scheme: dark);
</style><link rel="canonical" href="../#sec-ecmascript-language-functions-and-classes"></head>
<body><div id="menu"><div id="menu-search"><input type="text" id="menu-search-box" placeholder="Search..."><div id="menu-search-results" class="inactive"></div></div><div id="menu-pins"><div class="menu-pane-header">Pins<button class="unpin-all">clear</button></div><ul id="menu-pins-list"></ul></div><div class="menu-pane-header">Table of Contents</div><div id="menu-toc"><ol class="toc"><li><span class="item-toggle-none"></span><a href="./#sec-intro" title="Introduction">Introduction</a></li><li><span class="item-toggle-none"></span><a href="scope.html#sec-scope" title="Scope"><span class="secnum">1</span> Scope</a></li><li><span class="item-toggle">+</span><a href="conformance.html#sec-conformance" title="Conformance"><span class="secnum">2</span> Conformance</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-normative-optional" title="Example Normative Optional Clause Heading"><span class="secnum">2.1</span> Example Normative Optional Clause Heading</a></li><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-legacy" title="Example Legacy Clause Heading"><span class="secnum">2.2</span> Example Legacy Clause Heading</a></li><li><span class="item-toggle-none"></span><a href="conformance.html#sec-conformance-legacy-normative-optional" title="Example Legacy Normative Optional Clause Heading"><span class="secnum">2.3</span> Example Legacy Normative Optional Clause Heading</a></li></ol></li><li><span class="item-toggle-none"></span><a href="normative-references.html#sec-normative-references" title="Normative References"><span class="secnum">3</span> Normative References</a></li><li><span class="item-toggle">+</span><a href="overview.html#sec-overview" title="Overview"><span class="secnum">4</span> Overview</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-web-scripting" title="Web Scripting"><span class="secnum">4.1</span> Web Scripting</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-hosts-and-implementations" title="Hosts and Implementations"><span class="secnum">4.2</span> Hosts and Implementations</a></li><li><span class="item-toggle">+</span><a href="overview.html#sec-ecmascript-overview" title="ECMAScript Overview"><span class="secnum">4.3</span> ECMAScript Overview</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-objects" title="Objects"><span class="secnum">4.3.1</span> Objects</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-strict-variant-of-ecmascript" title="The Strict Variant of ECMAScript"><span class="secnum">4.3.2</span> The Strict Variant of ECMAScript</a></li></ol></li><li><span class="item-toggle">+</span><a href="overview.html#sec-terms-and-definitions" title="Terms and Definitions"><span class="secnum">4.4</span> Terms and Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-implementation-approximated" title="implementation-approximated"><span class="secnum">4.4.1</span> implementation-approximated</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-implementation-defined" title="implementation-defined"><span class="secnum">4.4.2</span> implementation-defined</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-host-defined" title="host-defined"><span class="secnum">4.4.3</span> host-defined</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-type" title="type"><span class="secnum">4.4.4</span> type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-primitive-value" title="primitive value"><span class="secnum">4.4.5</span> primitive value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-object" title="object"><span class="secnum">4.4.6</span> object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-constructor" title="constructor"><span class="secnum">4.4.7</span> constructor</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-prototype" title="prototype"><span class="secnum">4.4.8</span> prototype</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-ordinary-object" title="ordinary object"><span class="secnum">4.4.9</span> ordinary object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-exotic-object" title="exotic object"><span class="secnum">4.4.10</span> exotic object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-standard-object" title="standard object"><span class="secnum">4.4.11</span> standard object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-object" title="built-in object"><span class="secnum">4.4.12</span> built-in object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-undefined-value" title="undefined value"><span class="secnum">4.4.13</span> undefined value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-undefined-type" title="Undefined type"><span class="secnum">4.4.14</span> Undefined type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-null-value" title="null value"><span class="secnum">4.4.15</span> null value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-null-type" title="Null type"><span class="secnum">4.4.16</span> Null type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-boolean-value" title="Boolean value"><span class="secnum">4.4.17</span> Boolean value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-boolean-type" title="Boolean type"><span class="secnum">4.4.18</span> Boolean type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-boolean-object" title="Boolean object"><span class="secnum">4.4.19</span> Boolean object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-string-value" title="String value"><span class="secnum">4.4.20</span> String value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-string-type" title="String type"><span class="secnum">4.4.21</span> String type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-string-object" title="String object"><span class="secnum">4.4.22</span> String object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-number-value" title="Number value"><span class="secnum">4.4.23</span> Number value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-number-type" title="Number type"><span class="secnum">4.4.24</span> Number type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-number-object" title="Number object"><span class="secnum">4.4.25</span> Number object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-infinity" title="Infinity"><span class="secnum">4.4.26</span> Infinity</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-nan" title="NaN"><span class="secnum">4.4.27</span> NaN</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-bigint-value" title="BigInt value"><span class="secnum">4.4.28</span> BigInt value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-bigint-type" title="BigInt type"><span class="secnum">4.4.29</span> BigInt type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-bigint-object" title="BigInt object"><span class="secnum">4.4.30</span> BigInt object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-symbol-value" title="Symbol value"><span class="secnum">4.4.31</span> Symbol value</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-symbol-type" title="Symbol type"><span class="secnum">4.4.32</span> Symbol type</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-symbol-object" title="Symbol object"><span class="secnum">4.4.33</span> Symbol object</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-terms-and-definitions-function" title="function"><span class="secnum">4.4.34</span> function</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-function" title="built-in function"><span class="secnum">4.4.35</span> built-in function</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-constructor" title="built-in constructor"><span class="secnum">4.4.36</span> built-in constructor</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-property" title="property"><span class="secnum">4.4.37</span> property</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-method" title="method"><span class="secnum">4.4.38</span> method</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-built-in-method" title="built-in method"><span class="secnum">4.4.39</span> built-in method</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-attribute" title="attribute"><span class="secnum">4.4.40</span> attribute</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-own-property" title="own property"><span class="secnum">4.4.41</span> own property</a></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-inherited-property" title="inherited property"><span class="secnum">4.4.42</span> inherited property</a></li></ol></li><li><span class="item-toggle-none"></span><a href="overview.html#sec-organization-of-this-specification" title="Organization of This Specification"><span class="secnum">4.5</span> Organization of This Specification</a></li></ol></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-notational-conventions" title="Notational Conventions"><span class="secnum">5</span> Notational Conventions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-syntactic-and-lexical-grammars" title="Syntactic and Lexical Grammars"><span class="secnum">5.1</span> Syntactic and Lexical Grammars</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-context-free-grammars" title="Context-Free Grammars"><span class="secnum">5.1.1</span> Context-Free Grammars</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-lexical-and-regexp-grammars" title="The Lexical and RegExp Grammars"><span class="secnum">5.1.2</span> The Lexical and RegExp Grammars</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-numeric-string-grammar" title="The Numeric String Grammar"><span class="secnum">5.1.3</span> The Numeric String Grammar</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-syntactic-grammar" title="The Syntactic Grammar"><span class="secnum">5.1.4</span> The Syntactic Grammar</a></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-grammar-notation" title="Grammar Notation"><span class="secnum">5.1.5</span> Grammar Notation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-terminal-symbols" title="Terminal Symbols"><span class="secnum">5.1.5.1</span> Terminal Symbols</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-nonterminal-symbols-and-productions" title="Nonterminal Symbols and Productions"><span class="secnum">5.1.5.2</span> Nonterminal Symbols and Productions</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-optional-symbols" title="Optional Symbols"><span class="secnum">5.1.5.3</span> Optional Symbols</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-grammatical-parameters" title="Grammatical Parameters"><span class="secnum">5.1.5.4</span> Grammatical Parameters</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-one-of" title="one of"><span class="secnum">5.1.5.5</span> one of</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-empty" title="[empty]"><span class="secnum">5.1.5.6</span> [empty]</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-lookahead-restrictions" title="Lookahead Restrictions"><span class="secnum">5.1.5.7</span> Lookahead Restrictions</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-no-lineterminator-here" title="[no LineTerminator here]"><span class="secnum">5.1.5.8</span> [no <emu-nt>LineTerminator</emu-nt> here]</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-but-not" title="but not"><span class="secnum">5.1.5.9</span> but not</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-descriptive-phrases" title="Descriptive Phrases"><span class="secnum">5.1.5.10</span> Descriptive Phrases</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-algorithm-conventions" title="Algorithm Conventions"><span class="secnum">5.2</span> Algorithm Conventions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-evaluation-order" title="Evaluation Order"><span class="secnum">5.2.1</span> Evaluation Order</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-algorithm-conventions-abstract-operations" title="Abstract Operations"><span class="secnum">5.2.2</span> Abstract Operations</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations" title="Syntax-Directed Operations"><span class="secnum">5.2.3</span> Syntax-Directed Operations</a></li><li><span class="item-toggle">+</span><a href="notational-conventions.html#sec-runtime-semantics" title="Runtime Semantics"><span class="secnum">5.2.4</span> Runtime Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-completion-ao" title="Completion ( completionRecord )"><span class="secnum">5.2.4.1</span> Completion ( <var>completionRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-throw-an-exception" title="Throw an Exception"><span class="secnum">5.2.4.2</span> Throw an Exception</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-shorthands-for-unwrapping-completion-records" title="Shorthands for Unwrapping Completion Records"><span class="secnum">5.2.4.3</span> Shorthands for Unwrapping Completion Records</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-implicit-normal-completion" title="Implicit Normal Completion"><span class="secnum">5.2.4.4</span> Implicit Normal Completion</a></li></ol></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-static-semantic-rules" title="Static Semantics"><span class="secnum">5.2.5</span> Static Semantics</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-mathematical-operations" title="Mathematical Operations"><span class="secnum">5.2.6</span> Mathematical Operations</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-value-notation" title="Value Notation"><span class="secnum">5.2.7</span> Value Notation</a></li><li><span class="item-toggle-none"></span><a href="notational-conventions.html#sec-identity" title="Identity"><span class="secnum">5.2.8</span> Identity</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-data-types-and-values" title="ECMAScript Data Types and Values"><span class="secnum">6</span> ECMAScript Data Types and Values</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types" title="ECMAScript Language Types"><span class="secnum">6.1</span> ECMAScript Language Types</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-undefined-type" title="The Undefined Type"><span class="secnum">6.1.1</span> The Undefined Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-null-type" title="The Null Type"><span class="secnum">6.1.2</span> The Null Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-boolean-type" title="The Boolean Type"><span class="secnum">6.1.3</span> The Boolean Type</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-string-type" title="The String Type"><span class="secnum">6.1.4</span> The String Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-stringindexof" title="StringIndexOf ( string, searchValue, fromIndex )"><span class="secnum">6.1.4.1</span> StringIndexOf ( <var>string</var>, <var>searchValue</var>, <var>fromIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-stringlastindexof" title="StringLastIndexOf ( string, searchValue, fromIndex )"><span class="secnum">6.1.4.2</span> StringLastIndexOf ( <var>string</var>, <var>searchValue</var>, <var>fromIndex</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-symbol-type" title="The Symbol Type"><span class="secnum">6.1.5</span> The Symbol Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols" title="Well-Known Symbols"><span class="secnum">6.1.5.1</span> Well-Known Symbols</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-numeric-types" title="Numeric Types"><span class="secnum">6.1.6</span> Numeric Types</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-number-type" title="The Number Type"><span class="secnum">6.1.6.1</span> The Number Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-unaryMinus" title="Number::unaryMinus ( x )"><span class="secnum">6.1.6.1.1</span> Number::unaryMinus ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseNOT" title="Number::bitwiseNOT ( x )"><span class="secnum">6.1.6.1.2</span> Number::bitwiseNOT ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-exponentiate" title="Number::exponentiate ( base, exponent )"><span class="secnum">6.1.6.1.3</span> Number::exponentiate ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-multiply" title="Number::multiply ( x, y )"><span class="secnum">6.1.6.1.4</span> Number::multiply ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-divide" title="Number::divide ( x, y )"><span class="secnum">6.1.6.1.5</span> Number::divide ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-remainder" title="Number::remainder ( n, d )"><span class="secnum">6.1.6.1.6</span> Number::remainder ( <var>n</var>, <var>d</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-add" title="Number::add ( x, y )"><span class="secnum">6.1.6.1.7</span> Number::add ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-subtract" title="Number::subtract ( x, y )"><span class="secnum">6.1.6.1.8</span> Number::subtract ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-leftShift" title="Number::leftShift ( x, y )"><span class="secnum">6.1.6.1.9</span> Number::leftShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-signedRightShift" title="Number::signedRightShift ( x, y )"><span class="secnum">6.1.6.1.10</span> Number::signedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-unsignedRightShift" title="Number::unsignedRightShift ( x, y )"><span class="secnum">6.1.6.1.11</span> Number::unsignedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-lessThan" title="Number::lessThan ( x, y )"><span class="secnum">6.1.6.1.12</span> Number::lessThan ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-equal" title="Number::equal ( x, y )"><span class="secnum">6.1.6.1.13</span> Number::equal ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-sameValue" title="Number::sameValue ( x, y )"><span class="secnum">6.1.6.1.14</span> Number::sameValue ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-sameValueZero" title="Number::sameValueZero ( x, y )"><span class="secnum">6.1.6.1.15</span> Number::sameValueZero ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numberbitwiseop" title="NumberBitwiseOp ( op, x, y )"><span class="secnum">6.1.6.1.16</span> NumberBitwiseOp ( <var>op</var>, <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseAND" title="Number::bitwiseAND ( x, y )"><span class="secnum">6.1.6.1.17</span> Number::bitwiseAND ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseXOR" title="Number::bitwiseXOR ( x, y )"><span class="secnum">6.1.6.1.18</span> Number::bitwiseXOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-bitwiseOR" title="Number::bitwiseOR ( x, y )"><span class="secnum">6.1.6.1.19</span> Number::bitwiseOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-number-tostring" title="Number::toString ( x, radix )"><span class="secnum">6.1.6.1.20</span> Number::toString ( <var>x</var>, <var>radix</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types-bigint-type" title="The BigInt Type"><span class="secnum">6.1.6.2</span> The BigInt Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-unaryMinus" title="BigInt::unaryMinus ( x )"><span class="secnum">6.1.6.2.1</span> BigInt::unaryMinus ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseNOT" title="BigInt::bitwiseNOT ( x )"><span class="secnum">6.1.6.2.2</span> BigInt::bitwiseNOT ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-exponentiate" title="BigInt::exponentiate ( base, exponent )"><span class="secnum">6.1.6.2.3</span> BigInt::exponentiate ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-multiply" title="BigInt::multiply ( x, y )"><span class="secnum">6.1.6.2.4</span> BigInt::multiply ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-divide" title="BigInt::divide ( x, y )"><span class="secnum">6.1.6.2.5</span> BigInt::divide ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-remainder" title="BigInt::remainder ( n, d )"><span class="secnum">6.1.6.2.6</span> BigInt::remainder ( <var>n</var>, <var>d</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-add" title="BigInt::add ( x, y )"><span class="secnum">6.1.6.2.7</span> BigInt::add ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-subtract" title="BigInt::subtract ( x, y )"><span class="secnum">6.1.6.2.8</span> BigInt::subtract ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-leftShift" title="BigInt::leftShift ( x, y )"><span class="secnum">6.1.6.2.9</span> BigInt::leftShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-signedRightShift" title="BigInt::signedRightShift ( x, y )"><span class="secnum">6.1.6.2.10</span> BigInt::signedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-unsignedRightShift" title="BigInt::unsignedRightShift ( x, y )"><span class="secnum">6.1.6.2.11</span> BigInt::unsignedRightShift ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-lessThan" title="BigInt::lessThan ( x, y )"><span class="secnum">6.1.6.2.12</span> BigInt::lessThan ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-equal" title="BigInt::equal ( x, y )"><span class="secnum">6.1.6.2.13</span> BigInt::equal ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryand" title="BinaryAnd ( x, y )"><span class="secnum">6.1.6.2.14</span> BinaryAnd ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryor" title="BinaryOr ( x, y )"><span class="secnum">6.1.6.2.15</span> BinaryOr ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-binaryxor" title="BinaryXor ( x, y )"><span class="secnum">6.1.6.2.16</span> BinaryXor ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-bigintbitwiseop" title="BigIntBitwiseOp ( op, x, y )"><span class="secnum">6.1.6.2.17</span> BigIntBitwiseOp ( <var>op</var>, <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseAND" title="BigInt::bitwiseAND ( x, y )"><span class="secnum">6.1.6.2.18</span> BigInt::bitwiseAND ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseXOR" title="BigInt::bitwiseXOR ( x, y )"><span class="secnum">6.1.6.2.19</span> BigInt::bitwiseXOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-bitwiseOR" title="BigInt::bitwiseOR ( x, y )"><span class="secnum">6.1.6.2.20</span> BigInt::bitwiseOR ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-numeric-types-bigint-tostring" title="BigInt::toString ( x, radix )"><span class="secnum">6.1.6.2.21</span> BigInt::toString ( <var>x</var>, <var>radix</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-object-type" title="The Object Type"><span class="secnum">6.1.7</span> The Object Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-property-attributes" title="Property Attributes"><span class="secnum">6.1.7.1</span> Property Attributes</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-object-internal-methods-and-internal-slots" title="Object Internal Methods and Internal Slots"><span class="secnum">6.1.7.2</span> Object Internal Methods and Internal Slots</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-invariants-of-the-essential-internal-methods" title="Invariants of the Essential Internal Methods"><span class="secnum">6.1.7.3</span> Invariants of the Essential Internal Methods</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-well-known-intrinsic-objects" title="Well-Known Intrinsic Objects"><span class="secnum">6.1.7.4</span> Well-Known Intrinsic Objects</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-ecmascript-specification-types" title="ECMAScript Specification Types"><span class="secnum">6.2</span> ECMAScript Specification Types</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-enum-specification-type" title="The Enum Specification Type"><span class="secnum">6.2.1</span> The Enum Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type" title="The List and Record Specification Types"><span class="secnum">6.2.2</span> The List and Record Specification Types</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-set-and-relation-specification-type" title="The Set and Relation Specification Types"><span class="secnum">6.2.3</span> The Set and Relation Specification Types</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type" title="The Completion Record Specification Type"><span class="secnum">6.2.4</span> The Completion Record Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-normalcompletion" title="NormalCompletion ( value )"><span class="secnum">6.2.4.1</span> NormalCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-throwcompletion" title="ThrowCompletion ( value )"><span class="secnum">6.2.4.2</span> ThrowCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-returncompletion" title="ReturnCompletion ( value )"><span class="secnum">6.2.4.3</span> ReturnCompletion ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-updateempty" title="UpdateEmpty ( completionRecord, value )"><span class="secnum">6.2.4.4</span> UpdateEmpty ( <var>completionRecord</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type" title="The Reference Record Specification Type"><span class="secnum">6.2.5</span> The Reference Record Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-ispropertyreference" title="IsPropertyReference ( V )"><span class="secnum">6.2.5.1</span> IsPropertyReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isunresolvablereference" title="IsUnresolvableReference ( V )"><span class="secnum">6.2.5.2</span> IsUnresolvableReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-issuperreference" title="IsSuperReference ( V )"><span class="secnum">6.2.5.3</span> IsSuperReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isprivatereference" title="IsPrivateReference ( V )"><span class="secnum">6.2.5.4</span> IsPrivateReference ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-getvalue" title="GetValue ( V )"><span class="secnum">6.2.5.5</span> GetValue ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-putvalue" title="PutValue ( V, W )"><span class="secnum">6.2.5.6</span> PutValue ( <var>V</var>, <var>W</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-getthisvalue" title="GetThisValue ( V )"><span class="secnum">6.2.5.7</span> GetThisValue ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-initializereferencedbinding" title="InitializeReferencedBinding ( V, W )"><span class="secnum">6.2.5.8</span> InitializeReferencedBinding ( <var>V</var>, <var>W</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-makeprivatereference" title="MakePrivateReference ( baseValue, privateIdentifier )"><span class="secnum">6.2.5.9</span> MakePrivateReference ( <var>baseValue</var>, <var>privateIdentifier</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-property-descriptor-specification-type" title="The Property Descriptor Specification Type"><span class="secnum">6.2.6</span> The Property Descriptor Specification Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isaccessordescriptor" title="IsAccessorDescriptor ( Desc )"><span class="secnum">6.2.6.1</span> IsAccessorDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isdatadescriptor" title="IsDataDescriptor ( Desc )"><span class="secnum">6.2.6.2</span> IsDataDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-isgenericdescriptor" title="IsGenericDescriptor ( Desc )"><span class="secnum">6.2.6.3</span> IsGenericDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-frompropertydescriptor" title="FromPropertyDescriptor ( Desc )"><span class="secnum">6.2.6.4</span> FromPropertyDescriptor ( <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-topropertydescriptor" title="ToPropertyDescriptor ( Obj )"><span class="secnum">6.2.6.5</span> ToPropertyDescriptor ( <var>Obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-completepropertydescriptor" title="CompletePropertyDescriptor ( Desc )"><span class="secnum">6.2.6.6</span> CompletePropertyDescriptor ( <var>Desc</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-lexical-environment-and-environment-record-specification-types" title="The Environment Record Specification Type"><span class="secnum">6.2.7</span> The Environment Record Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-abstract-closure" title="The Abstract Closure Specification Type"><span class="secnum">6.2.8</span> The Abstract Closure Specification Type</a></li><li><span class="item-toggle">+</span><a href="ecmascript-data-types-and-values.html#sec-data-blocks" title="Data Blocks"><span class="secnum">6.2.9</span> Data Blocks</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-createbytedatablock" title="CreateByteDataBlock ( size )"><span class="secnum">6.2.9.1</span> CreateByteDataBlock ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-createsharedbytedatablock" title="CreateSharedByteDataBlock ( size )"><span class="secnum">6.2.9.2</span> CreateSharedByteDataBlock ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-copydatablockbytes" title="CopyDataBlockBytes ( toBlock, toIndex, fromBlock, fromIndex, count )"><span class="secnum">6.2.9.3</span> CopyDataBlockBytes ( <var>toBlock</var>, <var>toIndex</var>, <var>fromBlock</var>, <var>fromIndex</var>, <var>count</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type" title="The PrivateElement Specification Type"><span class="secnum">6.2.10</span> The PrivateElement Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type" title="The ClassFieldDefinition Record Specification Type"><span class="secnum">6.2.11</span> The ClassFieldDefinition Record Specification Type</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-private-names" title="Private Names"><span class="secnum">6.2.12</span> Private Names</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-data-types-and-values.html#sec-classstaticblockdefinition-record-specification-type" title="The ClassStaticBlockDefinition Record Specification Type"><span class="secnum">6.2.13</span> The ClassStaticBlockDefinition Record Specification Type</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-abstract-operations" title="Abstract Operations"><span class="secnum">7</span> Abstract Operations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-type-conversion" title="Type Conversion"><span class="secnum">7.1</span> Type Conversion</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-toprimitive" title="ToPrimitive ( input [ , preferredType ] )"><span class="secnum">7.1.1</span> ToPrimitive ( <var>input</var> [ , <var>preferredType</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ordinarytoprimitive" title="OrdinaryToPrimitive ( O, hint )"><span class="secnum">7.1.1.1</span> OrdinaryToPrimitive ( <var>O</var>, <var>hint</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toboolean" title="ToBoolean ( argument )"><span class="secnum">7.1.2</span> ToBoolean ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tonumeric" title="ToNumeric ( value )"><span class="secnum">7.1.3</span> ToNumeric ( <var>value</var> )</a></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-tonumber" title="ToNumber ( argument )"><span class="secnum">7.1.4</span> ToNumber ( <var>argument</var> )</a><ol class="toc"><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-tonumber-applied-to-the-string-type" title="ToNumber Applied to the String Type"><span class="secnum">7.1.4.1</span> ToNumber Applied to the String Type</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-stringtonumber" title="StringToNumber ( str )"><span class="secnum">7.1.4.1.1</span> StringToNumber ( <var>str</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-runtime-semantics-stringnumericvalue" title="Runtime Semantics: StringNumericValue"><span class="secnum">7.1.4.1.2</span> RS: StringNumericValue</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-roundmvresult" title="RoundMVResult ( n )"><span class="secnum">7.1.4.1.3</span> RoundMVResult ( <var>n</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tointegerorinfinity" title="ToIntegerOrInfinity ( argument )"><span class="secnum">7.1.5</span> ToIntegerOrInfinity ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint32" title="ToInt32 ( argument )"><span class="secnum">7.1.6</span> ToInt32 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint32" title="ToUint32 ( argument )"><span class="secnum">7.1.7</span> ToUint32 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint16" title="ToInt16 ( argument )"><span class="secnum">7.1.8</span> ToInt16 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint16" title="ToUint16 ( argument )"><span class="secnum">7.1.9</span> ToUint16 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toint8" title="ToInt8 ( argument )"><span class="secnum">7.1.10</span> ToInt8 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint8" title="ToUint8 ( argument )"><span class="secnum">7.1.11</span> ToUint8 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-touint8clamp" title="ToUint8Clamp ( argument )"><span class="secnum">7.1.12</span> ToUint8Clamp ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobigint" title="ToBigInt ( argument )"><span class="secnum">7.1.13</span> ToBigInt ( <var>argument</var> )</a></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-stringtobigint" title="StringToBigInt ( str )"><span class="secnum">7.1.14</span> StringToBigInt ( <var>str</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-stringintegerliteral-grammar" title="StringIntegerLiteral Grammar"><span class="secnum">7.1.14.1</span> StringIntegerLiteral Grammar</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-runtime-semantics-mv-for-stringintegerliteral" title="Runtime Semantics: MV"><span class="secnum">7.1.14.2</span> RS: MV</a></li></ol></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobigint64" title="ToBigInt64 ( argument )"><span class="secnum">7.1.15</span> ToBigInt64 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tobiguint64" title="ToBigUint64 ( argument )"><span class="secnum">7.1.16</span> ToBigUint64 ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tostring" title="ToString ( argument )"><span class="secnum">7.1.17</span> ToString ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toobject" title="ToObject ( argument )"><span class="secnum">7.1.18</span> ToObject ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-topropertykey" title="ToPropertyKey ( argument )"><span class="secnum">7.1.19</span> ToPropertyKey ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-tolength" title="ToLength ( argument )"><span class="secnum">7.1.20</span> ToLength ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-canonicalnumericindexstring" title="CanonicalNumericIndexString ( argument )"><span class="secnum">7.1.21</span> CanonicalNumericIndexString ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-toindex" title="ToIndex ( value )"><span class="secnum">7.1.22</span> ToIndex ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-testing-and-comparison-operations" title="Testing and Comparison Operations"><span class="secnum">7.2</span> Testing and Comparison Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-requireobjectcoercible" title="RequireObjectCoercible ( argument )"><span class="secnum">7.2.1</span> RequireObjectCoercible ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isarray" title="IsArray ( argument )"><span class="secnum">7.2.2</span> IsArray ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iscallable" title="IsCallable ( argument )"><span class="secnum">7.2.3</span> IsCallable ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isconstructor" title="IsConstructor ( argument )"><span class="secnum">7.2.4</span> IsConstructor ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isextensible-o" title="IsExtensible ( O )"><span class="secnum">7.2.5</span> IsExtensible ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isregexp" title="IsRegExp ( argument )"><span class="secnum">7.2.6</span> IsRegExp ( <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isstringwellformedunicode" title="Static Semantics: IsStringWellFormedUnicode ( string )"><span class="secnum">7.2.7</span> SS: IsStringWellFormedUnicode ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-sametype" title="SameType ( x, y )"><span class="secnum">7.2.8</span> SameType ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevalue" title="SameValue ( x, y )"><span class="secnum">7.2.9</span> SameValue ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevaluezero" title="SameValueZero ( x, y )"><span class="secnum">7.2.10</span> SameValueZero ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-samevaluenonnumber" title="SameValueNonNumber ( x, y )"><span class="secnum">7.2.11</span> SameValueNonNumber ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-islessthan" title="IsLessThan ( x, y, LeftFirst )"><span class="secnum">7.2.12</span> IsLessThan ( <var>x</var>, <var>y</var>, <var>LeftFirst</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-islooselyequal" title="IsLooselyEqual ( x, y )"><span class="secnum">7.2.13</span> IsLooselyEqual ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-isstrictlyequal" title="IsStrictlyEqual ( x, y )"><span class="secnum">7.2.14</span> IsStrictlyEqual ( <var>x</var>, <var>y</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-operations-on-objects" title="Operations on Objects"><span class="secnum">7.3</span> Operations on Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-makebasicobject" title="MakeBasicObject ( internalSlotsList )"><span class="secnum">7.3.1</span> MakeBasicObject ( <var>internalSlotsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-get-o-p" title="Get ( O, P )"><span class="secnum">7.3.2</span> Get ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getv" title="GetV ( V, P )"><span class="secnum">7.3.3</span> GetV ( <var>V</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-set-o-p-v-throw" title="Set ( O, P, V, Throw )"><span class="secnum">7.3.4</span> Set ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Throw</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createdataproperty" title="CreateDataProperty ( O, P, V )"><span class="secnum">7.3.5</span> CreateDataProperty ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createdatapropertyorthrow" title="CreateDataPropertyOrThrow ( O, P, V )"><span class="secnum">7.3.6</span> CreateDataPropertyOrThrow ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createnonenumerabledatapropertyorthrow" title="CreateNonEnumerableDataPropertyOrThrow ( O, P, V )"><span class="secnum">7.3.7</span> CreateNonEnumerableDataPropertyOrThrow ( <var>O</var>, <var>P</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-definepropertyorthrow" title="DefinePropertyOrThrow ( O, P, desc )"><span class="secnum">7.3.8</span> DefinePropertyOrThrow ( <var>O</var>, <var>P</var>, <var>desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-deletepropertyorthrow" title="DeletePropertyOrThrow ( O, P )"><span class="secnum">7.3.9</span> DeletePropertyOrThrow ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getmethod" title="GetMethod ( V, P )"><span class="secnum">7.3.10</span> GetMethod ( <var>V</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hasproperty" title="HasProperty ( O, P )"><span class="secnum">7.3.11</span> HasProperty ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hasownproperty" title="HasOwnProperty ( O, P )"><span class="secnum">7.3.12</span> HasOwnProperty ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-call" title="Call ( F, V [ , argumentsList ] )"><span class="secnum">7.3.13</span> Call ( <var>F</var>, <var>V</var> [ , <var>argumentsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-construct" title="Construct ( F [ , argumentsList [ , newTarget ] ] )"><span class="secnum">7.3.14</span> Construct ( <var>F</var> [ , <var>argumentsList</var> [ , <var>newTarget</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-setintegritylevel" title="SetIntegrityLevel ( O, level )"><span class="secnum">7.3.15</span> SetIntegrityLevel ( <var>O</var>, <var>level</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-testintegritylevel" title="TestIntegrityLevel ( O, level )"><span class="secnum">7.3.16</span> TestIntegrityLevel ( <var>O</var>, <var>level</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createarrayfromlist" title="CreateArrayFromList ( elements )"><span class="secnum">7.3.17</span> CreateArrayFromList ( <var>elements</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-lengthofarraylike" title="LengthOfArrayLike ( obj )"><span class="secnum">7.3.18</span> LengthOfArrayLike ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createlistfromarraylike" title="CreateListFromArrayLike ( obj [ , validElementTypes ] )"><span class="secnum">7.3.19</span> CreateListFromArrayLike ( <var>obj</var> [ , <var>validElementTypes</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-invoke" title="Invoke ( V, P [ , argumentsList ] )"><span class="secnum">7.3.20</span> Invoke ( <var>V</var>, <var>P</var> [ , <var>argumentsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ordinaryhasinstance" title="OrdinaryHasInstance ( C, O )"><span class="secnum">7.3.21</span> OrdinaryHasInstance ( <var>C</var>, <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-speciesconstructor" title="SpeciesConstructor ( O, defaultConstructor )"><span class="secnum">7.3.22</span> SpeciesConstructor ( <var>O</var>, <var>defaultConstructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-enumerableownproperties" title="EnumerableOwnProperties ( O, kind )"><span class="secnum">7.3.23</span> EnumerableOwnProperties ( <var>O</var>, <var>kind</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getfunctionrealm" title="GetFunctionRealm ( obj )"><span class="secnum">7.3.24</span> GetFunctionRealm ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-copydataproperties" title="CopyDataProperties ( target, source, excludedItems )"><span class="secnum">7.3.25</span> CopyDataProperties ( <var>target</var>, <var>source</var>, <var>excludedItems</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateelementfind" title="PrivateElementFind ( O, P )"><span class="secnum">7.3.26</span> PrivateElementFind ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privatefieldadd" title="PrivateFieldAdd ( O, P, value )"><span class="secnum">7.3.27</span> PrivateFieldAdd ( <var>O</var>, <var>P</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privatemethodoraccessoradd" title="PrivateMethodOrAccessorAdd ( O, method )"><span class="secnum">7.3.28</span> PrivateMethodOrAccessorAdd ( <var>O</var>, <var>method</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-hostensurecanaddprivateelement" title="HostEnsureCanAddPrivateElement ( O )"><span class="secnum">7.3.29</span> HostEnsureCanAddPrivateElement ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateget" title="PrivateGet ( O, P )"><span class="secnum">7.3.30</span> PrivateGet ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-privateset" title="PrivateSet ( O, P, value )"><span class="secnum">7.3.31</span> PrivateSet ( <var>O</var>, <var>P</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-definefield" title="DefineField ( receiver, fieldRecord )"><span class="secnum">7.3.32</span> DefineField ( <var>receiver</var>, <var>fieldRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-initializeinstanceelements" title="InitializeInstanceElements ( O, constructor )"><span class="secnum">7.3.33</span> InitializeInstanceElements ( <var>O</var>, <var>constructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-add-value-to-keyed-group" title="AddValueToKeyedGroup ( groups, key, value )"><span class="secnum">7.3.34</span> AddValueToKeyedGroup ( <var>groups</var>, <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-groupby" title="GroupBy ( items, callback, keyCoercion )"><span class="secnum">7.3.35</span> GroupBy ( <var>items</var>, <var>callback</var>, <var>keyCoercion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getoptionsobject" title="GetOptionsObject ( options )"><span class="secnum">7.3.36</span> GetOptionsObject ( <var>options</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-SetterThatIgnoresPrototypeProperties" title="SetterThatIgnoresPrototypeProperties ( thisValue, home, p, v )"><span class="secnum">7.3.37</span> SetterThatIgnoresPrototypeProperties ( <var>thisValue</var>, <var>home</var>, <var>p</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="abstract-operations.html#sec-operations-on-iterator-objects" title="Operations on Iterator Objects"><span class="secnum">7.4</span> Operations on Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iterator-records" title="Iterator Records"><span class="secnum">7.4.1</span> Iterator Records</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratordirect" title="GetIteratorDirect ( obj )"><span class="secnum">7.4.2</span> GetIteratorDirect ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratorfrommethod" title="GetIteratorFromMethod ( obj, method )"><span class="secnum">7.4.3</span> GetIteratorFromMethod ( <var>obj</var>, <var>method</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiterator" title="GetIterator ( obj, kind )"><span class="secnum">7.4.4</span> GetIterator ( <var>obj</var>, <var>kind</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-getiteratorflattenable" title="GetIteratorFlattenable ( obj, primitiveHandling )"><span class="secnum">7.4.5</span> GetIteratorFlattenable ( <var>obj</var>, <var>primitiveHandling</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratornext" title="IteratorNext ( iteratorRecord [ , value ] )"><span class="secnum">7.4.6</span> IteratorNext ( <var>iteratorRecord</var> [ , <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorcomplete" title="IteratorComplete ( iteratorResult )"><span class="secnum">7.4.7</span> IteratorComplete ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorvalue" title="IteratorValue ( iteratorResult )"><span class="secnum">7.4.8</span> IteratorValue ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorstep" title="IteratorStep ( iteratorRecord )"><span class="secnum">7.4.9</span> IteratorStep ( <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorstepvalue" title="IteratorStepValue ( iteratorRecord )"><span class="secnum">7.4.10</span> IteratorStepValue ( <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorclose" title="IteratorClose ( iteratorRecord, completion )"><span class="secnum">7.4.11</span> IteratorClose ( <var>iteratorRecord</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratorcloseall" title="IteratorCloseAll ( iters, completion )"><span class="secnum">7.4.12</span> IteratorCloseAll ( <var>iters</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ifabruptcloseiterator" title="IfAbruptCloseIterator ( value, iteratorRecord )"><span class="secnum">7.4.13</span> IfAbruptCloseIterator ( <var>value</var>, <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-asynciteratorclose" title="AsyncIteratorClose ( iteratorRecord, completion )"><span class="secnum">7.4.14</span> AsyncIteratorClose ( <var>iteratorRecord</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-ifabruptcloseasynciterator" title="IfAbruptCloseAsyncIterator ( value, iteratorRecord )"><span class="secnum">7.4.15</span> IfAbruptCloseAsyncIterator ( <var>value</var>, <var>iteratorRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createiterresultobject" title="CreateIteratorResultObject ( value, done )"><span class="secnum">7.4.16</span> CreateIteratorResultObject ( <var>value</var>, <var>done</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-createlistiteratorRecord" title="CreateListIteratorRecord ( list )"><span class="secnum">7.4.17</span> CreateListIteratorRecord ( <var>list</var> )</a></li><li><span class="item-toggle-none"></span><a href="abstract-operations.html#sec-iteratortolist" title="IteratorToList ( iteratorRecord )"><span class="secnum">7.4.18</span> IteratorToList ( <var>iteratorRecord</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations" title="Syntax-Directed Operations"><span class="secnum">8</span> Syntax-Directed Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">8.1</span> RS: Evaluation</a></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-scope-analysis" title="Scope Analysis"><span class="secnum">8.2</span> Scope Analysis</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-boundnames" title="Static Semantics: BoundNames"><span class="secnum">8.2.1</span> SS: BoundNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-declarationpart" title="Static Semantics: DeclarationPart"><span class="secnum">8.2.2</span> SS: DeclarationPart</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isconstantdeclaration" title="Static Semantics: IsConstantDeclaration"><span class="secnum">8.2.3</span> SS: IsConstantDeclaration</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames" title="Static Semantics: LexicallyDeclaredNames"><span class="secnum">8.2.4</span> SS: LexicallyDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-lexicallyscopeddeclarations" title="Static Semantics: LexicallyScopedDeclarations"><span class="secnum">8.2.5</span> SS: LexicallyScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames" title="Static Semantics: VarDeclaredNames"><span class="secnum">8.2.6</span> SS: VarDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-varscopeddeclarations" title="Static Semantics: VarScopedDeclarations"><span class="secnum">8.2.7</span> SS: VarScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevellexicallydeclarednames" title="Static Semantics: TopLevelLexicallyDeclaredNames"><span class="secnum">8.2.8</span> SS: TopLevelLexicallyDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevellexicallyscopeddeclarations" title="Static Semantics: TopLevelLexicallyScopedDeclarations"><span class="secnum">8.2.9</span> SS: TopLevelLexicallyScopedDeclarations</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevelvardeclarednames" title="Static Semantics: TopLevelVarDeclaredNames"><span class="secnum">8.2.10</span> SS: TopLevelVarDeclaredNames</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-toplevelvarscopeddeclarations" title="Static Semantics: TopLevelVarScopedDeclarations"><span class="secnum">8.2.11</span> SS: TopLevelVarScopedDeclarations</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-labels" title="Labels"><span class="secnum">8.3</span> Labels</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsduplicatelabels" title="Static Semantics: ContainsDuplicateLabels"><span class="secnum">8.3.1</span> SS: ContainsDuplicateLabels</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedbreaktarget" title="Static Semantics: ContainsUndefinedBreakTarget"><span class="secnum">8.3.2</span> SS: ContainsUndefinedBreakTarget</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedcontinuetarget" title="Static Semantics: ContainsUndefinedContinueTarget"><span class="secnum">8.3.3</span> SS: ContainsUndefinedContinueTarget</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-function-name-inference" title="Function Name Inference"><span class="secnum">8.4</span> Function Name Inference</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-hasname" title="Static Semantics: HasName"><span class="secnum">8.4.1</span> SS: HasName</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isfunctiondefinition" title="Static Semantics: IsFunctionDefinition"><span class="secnum">8.4.2</span> SS: IsFunctionDefinition</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-isanonymousfunctiondefinition" title="Static Semantics: IsAnonymousFunctionDefinition ( expr )"><span class="secnum">8.4.3</span> SS: IsAnonymousFunctionDefinition ( <var>expr</var> )</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-isidentifierref" title="Static Semantics: IsIdentifierRef"><span class="secnum">8.4.4</span> SS: IsIdentifierRef</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-namedevaluation" title="Runtime Semantics: NamedEvaluation"><span class="secnum">8.4.5</span> RS: NamedEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-contains" title="Contains"><span class="secnum">8.5</span> Contains</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-contains" title="Static Semantics: Contains"><span class="secnum">8.5.1</span> SS: Contains</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-computedpropertycontains" title="Static Semantics: ComputedPropertyContains"><span class="secnum">8.5.2</span> SS: ComputedPropertyContains</a></li></ol></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-syntax-directed-operations-miscellaneous" title="Miscellaneous"><span class="secnum">8.6</span> Miscellaneous</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-instantiatefunctionobject" title="Runtime Semantics: InstantiateFunctionObject"><span class="secnum">8.6.1</span> RS: InstantiateFunctionObject</a></li><li><span class="item-toggle">+</span><a href="syntax-directed-operations.html#sec-runtime-semantics-bindinginitialization" title="Runtime Semantics: BindingInitialization"><span class="secnum">8.6.2</span> RS: BindingInitialization</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-initializeboundname" title="InitializeBoundName ( name, value, environment )"><span class="secnum">8.6.2.1</span> InitializeBoundName ( <var>name</var>, <var>value</var>, <var>environment</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-runtime-semantics-iteratorbindinginitialization" title="Runtime Semantics: IteratorBindingInitialization"><span class="secnum">8.6.3</span> RS: IteratorBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-assignmenttargettype" title="Static Semantics: AssignmentTargetType"><span class="secnum">8.6.4</span> SS: AssignmentTargetType</a></li><li><span class="item-toggle-none"></span><a href="syntax-directed-operations.html#sec-static-semantics-propname" title="Static Semantics: PropName"><span class="secnum">8.6.5</span> SS: PropName</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-executable-code-and-execution-contexts" title="Executable Code and Execution Contexts"><span class="secnum">9</span> Executable Code and Execution Contexts</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-environment-records" title="Environment Records"><span class="secnum">9.1</span> Environment Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-the-environment-record-type-hierarchy" title="The Environment Record Type Hierarchy"><span class="secnum">9.1.1</span> The Environment Record Type Hierarchy</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records" title="Declarative Environment Records"><span class="secnum">9.1.1.1</span> Declarative Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.1.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.1.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.1.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.1.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.1.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.1.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.1.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.1.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.1.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.1.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-declarative-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.1.11</span> WithBaseObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records" title="Object Environment Records"><span class="secnum">9.1.1.2</span> Object Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.2.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.2.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.2.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.2.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.2.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.2.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.2.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.2.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.2.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.2.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-object-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.2.11</span> WithBaseObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records" title="Function Environment Records"><span class="secnum">9.1.1.3</span> Function Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-bindthisvalue" title="BindThisValue ( envRec, V )"><span class="secnum">9.1.1.3.1</span> BindThisValue ( <var>envRec</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.3.2</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.3.3</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-function-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.3.4</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getsuperbase" title="GetSuperBase ( envRec )"><span class="secnum">9.1.1.3.5</span> GetSuperBase ( <var>envRec</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records" title="Global Environment Records"><span class="secnum">9.1.1.4</span> Global Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hasbinding-n" title="HasBinding ( N )"><span class="secnum">9.1.1.4.1</span> HasBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-createmutablebinding-n-d" title="CreateMutableBinding ( N, D )"><span class="secnum">9.1.1.4.2</span> CreateMutableBinding ( <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-createimmutablebinding-n-s" title="CreateImmutableBinding ( N, S )"><span class="secnum">9.1.1.4.3</span> CreateImmutableBinding ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-initializebinding-n-v" title="InitializeBinding ( N, V )"><span class="secnum">9.1.1.4.4</span> InitializeBinding ( <var>N</var>, <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-setmutablebinding-n-v-s" title="SetMutableBinding ( N, V, S )"><span class="secnum">9.1.1.4.5</span> SetMutableBinding ( <var>N</var>, <var>V</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.4.6</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.4.7</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.4.8</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.4.9</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-hassuperbinding" title="HasSuperBinding ( )"><span class="secnum">9.1.1.4.10</span> HasSuperBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-global-environment-records-withbaseobject" title="WithBaseObject ( )"><span class="secnum">9.1.1.4.11</span> WithBaseObject ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-haslexicaldeclaration" title="HasLexicalDeclaration ( envRec, N )"><span class="secnum">9.1.1.4.12</span> HasLexicalDeclaration ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hasrestrictedglobalproperty" title="HasRestrictedGlobalProperty ( envRec, N )"><span class="secnum">9.1.1.4.13</span> HasRestrictedGlobalProperty ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalvar" title="CanDeclareGlobalVar ( envRec, N )"><span class="secnum">9.1.1.4.14</span> CanDeclareGlobalVar ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-candeclareglobalfunction" title="CanDeclareGlobalFunction ( envRec, N )"><span class="secnum">9.1.1.4.15</span> CanDeclareGlobalFunction ( <var>envRec</var>, <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createglobalvarbinding" title="CreateGlobalVarBinding ( envRec, N, D )"><span class="secnum">9.1.1.4.16</span> CreateGlobalVarBinding ( <var>envRec</var>, <var>N</var>, <var>D</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createglobalfunctionbinding" title="CreateGlobalFunctionBinding ( envRec, N, V, D )"><span class="secnum">9.1.1.4.17</span> CreateGlobalFunctionBinding ( <var>envRec</var>, <var>N</var>, <var>V</var>, <var>D</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records" title="Module Environment Records"><span class="secnum">9.1.1.5</span> Module Environment Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-getbindingvalue-n-s" title="GetBindingValue ( N, S )"><span class="secnum">9.1.1.5.1</span> GetBindingValue ( <var>N</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-deletebinding-n" title="DeleteBinding ( N )"><span class="secnum">9.1.1.5.2</span> DeleteBinding ( <var>N</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-hasthisbinding" title="HasThisBinding ( )"><span class="secnum">9.1.1.5.3</span> HasThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-module-environment-records-getthisbinding" title="GetThisBinding ( )"><span class="secnum">9.1.1.5.4</span> GetThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createimportbinding" title="CreateImportBinding ( envRec, N, M, N2 )"><span class="secnum">9.1.1.5.5</span> CreateImportBinding ( <var>envRec</var>, <var>N</var>, <var>M</var>, <var>N2</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-environment-record-operations" title="Environment Record Operations"><span class="secnum">9.1.2</span> Environment Record Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getidentifierreference" title="GetIdentifierReference ( env, name, strict )"><span class="secnum">9.1.2.1</span> GetIdentifierReference ( <var>env</var>, <var>name</var>, <var>strict</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment" title="NewDeclarativeEnvironment ( E )"><span class="secnum">9.1.2.2</span> NewDeclarativeEnvironment ( <var>E</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newobjectenvironment" title="NewObjectEnvironment ( O, W, E )"><span class="secnum">9.1.2.3</span> NewObjectEnvironment ( <var>O</var>, <var>W</var>, <var>E</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newfunctionenvironment" title="NewFunctionEnvironment ( F, newTarget )"><span class="secnum">9.1.2.4</span> NewFunctionEnvironment ( <var>F</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newglobalenvironment" title="NewGlobalEnvironment ( G, thisValue )"><span class="secnum">9.1.2.5</span> NewGlobalEnvironment ( <var>G</var>, <var>thisValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newmoduleenvironment" title="NewModuleEnvironment ( E )"><span class="secnum">9.1.2.6</span> NewModuleEnvironment ( <var>E</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-privateenvironment-records" title="PrivateEnvironment Records"><span class="secnum">9.2</span> PrivateEnvironment Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-privateenvironment-record-operations" title="PrivateEnvironment Record Operations"><span class="secnum">9.2.1</span> PrivateEnvironment Record Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-newprivateenvironment" title="NewPrivateEnvironment ( outerPrivateEnv )"><span class="secnum">9.2.1.1</span> NewPrivateEnvironment ( <var>outerPrivateEnv</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolve-private-identifier" title="ResolvePrivateIdentifier ( privateEnv, identifier )"><span class="secnum">9.2.1.2</span> ResolvePrivateIdentifier ( <var>privateEnv</var>, <var>identifier</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-code-realms" title="Realms"><span class="secnum">9.3</span> Realms</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-initializehostdefinedrealm" title="InitializeHostDefinedRealm ( )"><span class="secnum">9.3.1</span> InitializeHostDefinedRealm ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-createintrinsics" title="CreateIntrinsics ( realmRec )"><span class="secnum">9.3.2</span> CreateIntrinsics ( <var>realmRec</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-setdefaultglobalbindings" title="SetDefaultGlobalBindings ( realmRec )"><span class="secnum">9.3.3</span> SetDefaultGlobalBindings ( <var>realmRec</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-execution-contexts" title="Execution Contexts"><span class="secnum">9.4</span> Execution Contexts</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getactivescriptormodule" title="GetActiveScriptOrModule ( )"><span class="secnum">9.4.1</span> GetActiveScriptOrModule ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolvebinding" title="ResolveBinding ( name [ , env ] )"><span class="secnum">9.4.2</span> ResolveBinding ( <var>name</var> [ , <var>env</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getthisenvironment" title="GetThisEnvironment ( )"><span class="secnum">9.4.3</span> GetThisEnvironment ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-resolvethisbinding" title="ResolveThisBinding ( )"><span class="secnum">9.4.4</span> ResolveThisBinding ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getnewtarget" title="GetNewTarget ( )"><span class="secnum">9.4.5</span> GetNewTarget ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-getglobalobject" title="GetGlobalObject ( )"><span class="secnum">9.4.6</span> GetGlobalObject ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-jobs" title="Jobs and Host Operations to Enqueue Jobs"><span class="secnum">9.5</span> Jobs and Host Operations to Enqueue Jobs</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-jobcallback-records" title="JobCallback Records"><span class="secnum">9.5.1</span> JobCallback Records</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostmakejobcallback" title="HostMakeJobCallback ( callback )"><span class="secnum">9.5.2</span> HostMakeJobCallback ( <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostcalljobcallback" title="HostCallJobCallback ( jobCallback, V, argumentsList )"><span class="secnum">9.5.3</span> HostCallJobCallback ( <var>jobCallback</var>, <var>V</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuegenericjob" title="HostEnqueueGenericJob ( job, realm )"><span class="secnum">9.5.4</span> HostEnqueueGenericJob ( <var>job</var>, <var>realm</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuepromisejob" title="HostEnqueuePromiseJob ( job, realm )"><span class="secnum">9.5.5</span> HostEnqueuePromiseJob ( <var>job</var>, <var>realm</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-hostenqueuetimeoutjob" title="HostEnqueueTimeoutJob ( timeoutJob, realm, milliseconds )"><span class="secnum">9.5.6</span> HostEnqueueTimeoutJob ( <var>timeoutJob</var>, <var>realm</var>, <var>milliseconds</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-agents" title="Agents"><span class="secnum">9.6</span> Agents</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agentsignifier" title="AgentSignifier ( )"><span class="secnum">9.6.1</span> AgentSignifier ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agentcansuspend" title="AgentCanSuspend ( )"><span class="secnum">9.6.2</span> AgentCanSuspend ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-IncrementModuleAsyncEvaluationCount" title="IncrementModuleAsyncEvaluationCount ( )"><span class="secnum">9.6.3</span> IncrementModuleAsyncEvaluationCount ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-agent-clusters" title="Agent Clusters"><span class="secnum">9.7</span> Agent Clusters</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-forward-progress" title="Forward Progress"><span class="secnum">9.8</span> Forward Progress</a></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-weakref-processing-model" title="Processing Model of WeakRef and FinalizationRegistry Targets"><span class="secnum">9.9</span> Processing Model of WeakRef and FinalizationRegistry Targets</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-weakref-invariants" title="Objectives"><span class="secnum">9.9.1</span> Objectives</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-liveness" title="Liveness"><span class="secnum">9.9.2</span> Liveness</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-weakref-execution" title="Execution"><span class="secnum">9.9.3</span> Execution</a></li><li><span class="item-toggle">+</span><a href="executable-code-and-execution-contexts.html#sec-weakref-host-hooks" title="Host Hooks"><span class="secnum">9.9.4</span> Host Hooks</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-host-cleanup-finalization-registry" title="HostEnqueueFinalizationRegistryCleanupJob ( finalizationRegistry )"><span class="secnum">9.9.4.1</span> HostEnqueueFinalizationRegistryCleanupJob ( <var>finalizationRegistry</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-clear-kept-objects" title="ClearKeptObjects ( )"><span class="secnum">9.10</span> ClearKeptObjects ( )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-addtokeptobjects" title="AddToKeptObjects ( value )"><span class="secnum">9.11</span> AddToKeptObjects ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-cleanup-finalization-registry" title="CleanupFinalizationRegistry ( finalizationRegistry )"><span class="secnum">9.12</span> CleanupFinalizationRegistry ( <var>finalizationRegistry</var> )</a></li><li><span class="item-toggle-none"></span><a href="executable-code-and-execution-contexts.html#sec-canbeheldweakly" title="CanBeHeldWeakly ( v )"><span class="secnum">9.13</span> CanBeHeldWeakly ( <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-and-exotic-objects-behaviours" title="Ordinary and Exotic Objects Behaviours"><span class="secnum">10</span> Ordinary and Exotic Objects Behaviours</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots" title="Ordinary Object Internal Methods and Internal Slots"><span class="secnum">10.1</span> Ordinary Object Internal Methods and Internal Slots</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.1.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetprototypeof" title="OrdinaryGetPrototypeOf ( O )"><span class="secnum">10.1.1.1</span> OrdinaryGetPrototypeOf ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.1.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarysetprototypeof" title="OrdinarySetPrototypeOf ( O, V )"><span class="secnum">10.1.2.1</span> OrdinarySetPrototypeOf ( <var>O</var>, <var>V</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.1.3</span> <var class="field">[[IsExtensible]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryisextensible" title="OrdinaryIsExtensible ( O )"><span class="secnum">10.1.3.1</span> OrdinaryIsExtensible ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.1.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarypreventextensions" title="OrdinaryPreventExtensions ( O )"><span class="secnum">10.1.4.1</span> OrdinaryPreventExtensions ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.1.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarygetownproperty" title="OrdinaryGetOwnProperty ( O, P )"><span class="secnum">10.1.5.1</span> OrdinaryGetOwnProperty ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.1.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydefineownproperty" title="OrdinaryDefineOwnProperty ( O, P, Desc )"><span class="secnum">10.1.6.1</span> OrdinaryDefineOwnProperty ( <var>O</var>, <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-iscompatiblepropertydescriptor" title="IsCompatiblePropertyDescriptor ( Extensible, Desc, Current )"><span class="secnum">10.1.6.2</span> IsCompatiblePropertyDescriptor ( <var>Extensible</var>, <var>Desc</var>, <var>Current</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-validateandapplypropertydescriptor" title="ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )"><span class="secnum">10.1.6.3</span> ValidateAndApplyPropertyDescriptor ( <var>O</var>, <var>P</var>, <var>extensible</var>, <var>Desc</var>, <var>current</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.1.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryhasproperty" title="OrdinaryHasProperty ( O, P )"><span class="secnum">10.1.7.1</span> OrdinaryHasProperty ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.1.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryget" title="OrdinaryGet ( O, P, Receiver )"><span class="secnum">10.1.8.1</span> OrdinaryGet ( <var>O</var>, <var>P</var>, <var>Receiver</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.1.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryset" title="OrdinarySet ( O, P, V, Receiver )"><span class="secnum">10.1.9.1</span> OrdinarySet ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarysetwithowndescriptor" title="OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )"><span class="secnum">10.1.9.2</span> OrdinarySetWithOwnDescriptor ( <var>O</var>, <var>P</var>, <var>V</var>, <var>Receiver</var>, <var>ownDesc</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.1.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarydelete" title="OrdinaryDelete ( O, P )"><span class="secnum">10.1.10.1</span> OrdinaryDelete ( <var>O</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinary-object-internal-methods-and-internal-slots-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.1.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryownpropertykeys" title="OrdinaryOwnPropertyKeys ( O )"><span class="secnum">10.1.11.1</span> OrdinaryOwnPropertyKeys ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate" title="OrdinaryObjectCreate ( proto [ , additionalInternalSlotsList ] )"><span class="secnum">10.1.12</span> OrdinaryObjectCreate ( <var>proto</var> [ , <var>additionalInternalSlotsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycreatefromconstructor" title="OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] )"><span class="secnum">10.1.13</span> OrdinaryCreateFromConstructor ( <var>constructor</var>, <var>intrinsicDefaultProto</var> [ , <var>internalSlotsList</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-getprototypefromconstructor" title="GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto )"><span class="secnum">10.1.14</span> GetPrototypeFromConstructor ( <var>constructor</var>, <var>intrinsicDefaultProto</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-requireinternalslot" title="RequireInternalSlot ( O, internalSlot )"><span class="secnum">10.1.15</span> RequireInternalSlot ( <var>O</var>, <var>internalSlot</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects" title="ECMAScript Function Objects"><span class="secnum">10.2</span> ECMAScript Function Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.2.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-prepareforordinarycall" title="PrepareForOrdinaryCall ( F, newTarget )"><span class="secnum">10.2.1.1</span> PrepareForOrdinaryCall ( <var>F</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallbindthis" title="OrdinaryCallBindThis ( F, calleeContext, thisArgument )"><span class="secnum">10.2.1.2</span> OrdinaryCallBindThis ( <var>F</var>, <var>calleeContext</var>, <var>thisArgument</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-runtime-semantics-evaluatebody" title="Runtime Semantics: EvaluateBody"><span class="secnum">10.2.1.3</span> RS: EvaluateBody</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycallevaluatebody" title="OrdinaryCallEvaluateBody ( F, argumentsList )"><span class="secnum">10.2.1.4</span> OrdinaryCallEvaluateBody ( <var>F</var>, <var>argumentsList</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.2.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate" title="OrdinaryFunctionCreate ( functionPrototype, sourceText, ParameterList, Body, thisMode, env, privateEnv )"><span class="secnum">10.2.3</span> OrdinaryFunctionCreate ( <var>functionPrototype</var>, <var>sourceText</var>, <var>ParameterList</var>, <var>Body</var>, <var>thisMode</var>, <var>env</var>, <var>privateEnv</var> )</a></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-addrestrictedfunctionproperties" title="AddRestrictedFunctionProperties ( F, realm )"><span class="secnum">10.2.4</span> AddRestrictedFunctionProperties ( <var>F</var>, <var>realm</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-%throwtypeerror%" title="%ThrowTypeError% ( )"><span class="secnum">10.2.4.1</span> %ThrowTypeError% ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor" title="MakeConstructor ( F [ , writablePrototype [ , prototype ] ] )"><span class="secnum">10.2.5</span> MakeConstructor ( <var>F</var> [ , <var>writablePrototype</var> [ , <var>prototype</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeclassconstructor" title="MakeClassConstructor ( F )"><span class="secnum">10.2.6</span> MakeClassConstructor ( <var>F</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod" title="MakeMethod ( F, homeObject )"><span class="secnum">10.2.7</span> MakeMethod ( <var>F</var>, <var>homeObject</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-definemethodproperty" title="DefineMethodProperty ( homeObject, key, closure, enumerable )"><span class="secnum">10.2.8</span> DefineMethodProperty ( <var>homeObject</var>, <var>key</var>, <var>closure</var>, <var>enumerable</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname" title="SetFunctionName ( F, name [ , prefix ] )"><span class="secnum">10.2.9</span> SetFunctionName ( <var>F</var>, <var>name</var> [ , <var>prefix</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionlength" title="SetFunctionLength ( F, length )"><span class="secnum">10.2.10</span> SetFunctionLength ( <var>F</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" title="FunctionDeclarationInstantiation ( func, argumentsList )"><span class="secnum">10.2.11</span> FunctionDeclarationInstantiation ( <var>func</var>, <var>argumentsList</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects" title="Built-in Function Objects"><span class="secnum">10.3</span> Built-in Function Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.3.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-function-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.3.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-builtincallorconstruct" title="BuiltinCallOrConstruct ( F, thisArgument, argumentsList, newTarget )"><span class="secnum">10.3.3</span> BuiltinCallOrConstruct ( <var>F</var>, <var>thisArgument</var>, <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction" title="CreateBuiltinFunction ( behaviour, length, name, additionalInternalSlotsList [ , realm [ , prototype [ , prefix [ , async ] ] ] ] )"><span class="secnum">10.3.4</span> CreateBuiltinFunction ( <var>behaviour</var>, <var>length</var>, <var>name</var>, <var>additionalInternalSlotsList</var> [ , <var>realm</var> [ , <var>prototype</var> [ , <var>prefix</var> [ , <var>async</var> ] ] ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-built-in-exotic-object-internal-methods-and-slots" title="Built-in Exotic Object Internal Methods and Slots"><span class="secnum">10.4</span> Built-in Exotic Object Internal Methods and Slots</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects" title="Bound Function Exotic Objects"><span class="secnum">10.4.1</span> Bound Function Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.4.1.1</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-bound-function-exotic-objects-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.4.1.2</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-boundfunctioncreate" title="BoundFunctionCreate ( targetFunction, boundThis, boundArgs )"><span class="secnum">10.4.1.3</span> BoundFunctionCreate ( <var>targetFunction</var>, <var>boundThis</var>, <var>boundArgs</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-array-exotic-objects" title="Array Exotic Objects"><span class="secnum">10.4.2</span> Array Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-array-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.2.1</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraycreate" title="ArrayCreate ( length [ , proto ] )"><span class="secnum">10.4.2.2</span> ArrayCreate ( <var>length</var> [ , <var>proto</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arrayspeciescreate" title="ArraySpeciesCreate ( originalArray, length )"><span class="secnum">10.4.2.3</span> ArraySpeciesCreate ( <var>originalArray</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arraysetlength" title="ArraySetLength ( A, Desc )"><span class="secnum">10.4.2.4</span> ArraySetLength ( <var>A</var>, <var>Desc</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects" title="String Exotic Objects"><span class="secnum">10.4.3</span> String Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.3.1</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.3.2</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-string-exotic-objects-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.3.3</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringcreate" title="StringCreate ( value, prototype )"><span class="secnum">10.4.3.4</span> StringCreate ( <var>value</var>, <var>prototype</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-stringgetownproperty" title="StringGetOwnProperty ( S, P )"><span class="secnum">10.4.3.5</span> StringGetOwnProperty ( <var>S</var>, <var>P</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects" title="Arguments Exotic Objects"><span class="secnum">10.4.4</span> Arguments Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.4.1</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.4.2</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.4.3</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.4.4</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-arguments-exotic-objects-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.4.4.5</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createunmappedargumentsobject" title="CreateUnmappedArgumentsObject ( argumentsList )"><span class="secnum">10.4.4.6</span> CreateUnmappedArgumentsObject ( <var>argumentsList</var> )</a></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-createmappedargumentsobject" title="CreateMappedArgumentsObject ( func, formals, argumentsList, env )"><span class="secnum">10.4.4.7</span> CreateMappedArgumentsObject ( <var>func</var>, <var>formals</var>, <var>argumentsList</var>, <var>env</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makearggetter" title="MakeArgGetter ( name, env )"><span class="secnum">10.4.4.7.1</span> MakeArgGetter ( <var>name</var>, <var>env</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeargsetter" title="MakeArgSetter ( name, env )"><span class="secnum">10.4.4.7.2</span> MakeArgSetter ( <var>name</var>, <var>env</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-exotic-objects" title="TypedArray Exotic Objects"><span class="secnum">10.4.5</span> TypedArray Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.4.5.1</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-getownproperty" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.5.2</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-hasproperty" title="[[HasProperty]] ( P )"><span class="secnum">10.4.5.3</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-defineownproperty" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.5.4</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-get" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.5.5</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-set" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.5.6</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-delete" title="[[Delete]] ( P )"><span class="secnum">10.4.5.7</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.5.8</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarray-with-buffer-witness-records" title="TypedArray With Buffer Witness Records"><span class="secnum">10.4.5.9</span> TypedArray With Buffer Witness Records</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-maketypedarraywithbufferwitnessrecord" title="MakeTypedArrayWithBufferWitnessRecord ( obj, order )"><span class="secnum">10.4.5.10</span> MakeTypedArrayWithBufferWitnessRecord ( <var>obj</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraycreate" title="TypedArrayCreate ( prototype )"><span class="secnum">10.4.5.11</span> TypedArrayCreate ( <var>prototype</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraybytelength" title="TypedArrayByteLength ( taRecord )"><span class="secnum">10.4.5.12</span> TypedArrayByteLength ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraylength" title="TypedArrayLength ( taRecord )"><span class="secnum">10.4.5.13</span> TypedArrayLength ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayoutofbounds" title="IsTypedArrayOutOfBounds ( taRecord )"><span class="secnum">10.4.5.14</span> IsTypedArrayOutOfBounds ( <var>taRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-istypedarrayfixedlength" title="IsTypedArrayFixedLength ( O )"><span class="secnum">10.4.5.15</span> IsTypedArrayFixedLength ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-isvalidintegerindex" title="IsValidIntegerIndex ( O, index )"><span class="secnum">10.4.5.16</span> IsValidIntegerIndex ( <var>O</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraygetelement" title="TypedArrayGetElement ( O, index )"><span class="secnum">10.4.5.17</span> TypedArrayGetElement ( <var>O</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-typedarraysetelement" title="TypedArraySetElement ( O, index, value )"><span class="secnum">10.4.5.18</span> TypedArraySetElement ( <var>O</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-isarraybufferviewoutofbounds" title="IsArrayBufferViewOutOfBounds ( O )"><span class="secnum">10.4.5.19</span> IsArrayBufferViewOutOfBounds ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects" title="Module Namespace Exotic Objects"><span class="secnum">10.4.6</span> Module Namespace Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.4.6.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.4.6.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.4.6.3</span> <var class="field">[[IsExtensible]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.4.6.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.4.6.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.4.6.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.4.6.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.4.6.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.4.6.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.4.6.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-module-namespace-exotic-objects-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.4.6.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-modulenamespacecreate" title="ModuleNamespaceCreate ( module, exports )"><span class="secnum">10.4.6.12</span> ModuleNamespaceCreate ( <var>module</var>, <var>exports</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-immutable-prototype-exotic-objects" title="Immutable Prototype Exotic Objects"><span class="secnum">10.4.7</span> Immutable Prototype Exotic Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-immutable-prototype-exotic-objects-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.4.7.1</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-set-immutable-prototype" title="SetImmutablePrototype ( O, V )"><span class="secnum">10.4.7.2</span> SetImmutablePrototype ( <var>O</var>, <var>V</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots" title="Proxy Object Internal Methods and Internal Slots"><span class="secnum">10.5</span> Proxy Object Internal Methods and Internal Slots</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof" title="[[GetPrototypeOf]] ( )"><span class="secnum">10.5.1</span> <var class="field">[[GetPrototypeOf]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v" title="[[SetPrototypeOf]] ( V )"><span class="secnum">10.5.2</span> <var class="field">[[SetPrototypeOf]]</var> ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-isextensible" title="[[IsExtensible]] ( )"><span class="secnum">10.5.3</span> <var class="field">[[IsExtensible]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-preventextensions" title="[[PreventExtensions]] ( )"><span class="secnum">10.5.4</span> <var class="field">[[PreventExtensions]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p" title="[[GetOwnProperty]] ( P )"><span class="secnum">10.5.5</span> <var class="field">[[GetOwnProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc" title="[[DefineOwnProperty]] ( P, Desc )"><span class="secnum">10.5.6</span> <var class="field">[[DefineOwnProperty]]</var> ( <var>P</var>, <var>Desc</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p" title="[[HasProperty]] ( P )"><span class="secnum">10.5.7</span> <var class="field">[[HasProperty]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver" title="[[Get]] ( P, Receiver )"><span class="secnum">10.5.8</span> <var class="field">[[Get]]</var> ( <var>P</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver" title="[[Set]] ( P, V, Receiver )"><span class="secnum">10.5.9</span> <var class="field">[[Set]]</var> ( <var>P</var>, <var>V</var>, <var>Receiver</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-delete-p" title="[[Delete]] ( P )"><span class="secnum">10.5.10</span> <var class="field">[[Delete]]</var> ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys" title="[[OwnPropertyKeys]] ( )"><span class="secnum">10.5.11</span> <var class="field">[[OwnPropertyKeys]]</var> ( )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist" title="[[Call]] ( thisArgument, argumentsList )"><span class="secnum">10.5.12</span> <var class="field">[[Call]]</var> ( <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget" title="[[Construct]] ( argumentsList, newTarget )"><span class="secnum">10.5.13</span> <var class="field">[[Construct]]</var> ( <var>argumentsList</var>, <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-validatenonrevokedproxy" title="ValidateNonRevokedProxy ( proxy )"><span class="secnum">10.5.14</span> ValidateNonRevokedProxy ( <var>proxy</var> )</a></li><li><span class="item-toggle-none"></span><a href="ordinary-and-exotic-objects-behaviours.html#sec-proxycreate" title="ProxyCreate ( target, handler )"><span class="secnum">10.5.15</span> ProxyCreate ( <var>target</var>, <var>handler</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-ecmascript-language-source-code" title="ECMAScript Language: Source Text"><span class="secnum">11</span> ECMAScript Language: Source Text</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-source-text" title="Source Text"><span class="secnum">11.1</span> Source Text</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-utf16encodecodepoint" title="Static Semantics: UTF16EncodeCodePoint ( cp )"><span class="secnum">11.1.1</span> SS: UTF16EncodeCodePoint ( <var>cp</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-codepointstostring" title="Static Semantics: CodePointsToString ( text )"><span class="secnum">11.1.2</span> SS: CodePointsToString ( <var>text</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-utf16decodesurrogatepair" title="Static Semantics: UTF16SurrogatePairToCodePoint ( lead, trail )"><span class="secnum">11.1.3</span> SS: UTF16SurrogatePairToCodePoint ( <var>lead</var>, <var>trail</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-codepointat" title="Static Semantics: CodePointAt ( string, position )"><span class="secnum">11.1.4</span> SS: CodePointAt ( <var>string</var>, <var>position</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-stringtocodepoints" title="Static Semantics: StringToCodePoints ( string )"><span class="secnum">11.1.5</span> SS: StringToCodePoints ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-parsetext" title="Static Semantics: ParseText ( sourceText, goalSymbol )"><span class="secnum">11.1.6</span> SS: ParseText ( <var>sourceText</var>, <var>goalSymbol</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-types-of-source-code" title="Types of Source Code"><span class="secnum">11.2</span> Types of Source Code</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-directive-prologues-and-the-use-strict-directive" title="Directive Prologues and the Use Strict Directive"><span class="secnum">11.2.1</span> Directive Prologues and the Use Strict Directive</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-source-code.html#sec-strict-mode-code" title="Strict Mode Code"><span class="secnum">11.2.2</span> Strict Mode Code</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-isstrict" title="Static Semantics: IsStrict ( node )"><span class="secnum">11.2.2.1</span> SS: IsStrict ( <var>node</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-source-code.html#sec-non-ecmascript-functions" title="Non-ECMAScript Functions"><span class="secnum">11.2.3</span> Non-ECMAScript Functions</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-ecmascript-language-lexical-grammar" title="ECMAScript Language: Lexical Grammar"><span class="secnum">12</span> ECMAScript Language: Lexical Grammar</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-unicode-format-control-characters" title="Unicode Format-Control Characters"><span class="secnum">12.1</span> Unicode Format-Control Characters</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-white-space" title="White Space"><span class="secnum">12.2</span> White Space</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-line-terminators" title="Line Terminators"><span class="secnum">12.3</span> Line Terminators</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-comments" title="Comments"><span class="secnum">12.4</span> Comments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-hashbang" title="Hashbang Comments"><span class="secnum">12.5</span> Hashbang Comments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-tokens" title="Tokens"><span class="secnum">12.6</span> Tokens</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-names-and-keywords" title="Names and Keywords"><span class="secnum">12.7</span> Names and Keywords</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-identifier-names" title="Identifier Names"><span class="secnum">12.7.1</span> Identifier Names</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifier-names-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.7.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifiercodepoints" title="Static Semantics: IdentifierCodePoints"><span class="secnum">12.7.1.2</span> SS: IdentifierCodePoints</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-identifiercodepoint" title="Static Semantics: IdentifierCodePoint"><span class="secnum">12.7.1.3</span> SS: IdentifierCodePoint</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-keywords-and-reserved-words" title="Keywords and Reserved Words"><span class="secnum">12.7.2</span> Keywords and Reserved Words</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-punctuators" title="Punctuators"><span class="secnum">12.8</span> Punctuators</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-ecmascript-language-lexical-grammar-literals" title="Literals"><span class="secnum">12.9</span> Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-null-literals" title="Null Literals"><span class="secnum">12.9.1</span> Null Literals</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-boolean-literals" title="Boolean Literals"><span class="secnum">12.9.2</span> Boolean Literals</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-numeric-literals" title="Numeric Literals"><span class="secnum">12.9.3</span> Numeric Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-numeric-literals-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.9.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-mv" title="Static Semantics: MV"><span class="secnum">12.9.3.2</span> SS: MV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-numericvalue" title="Static Semantics: NumericValue"><span class="secnum">12.9.3.3</span> SS: NumericValue</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-string-literals" title="String Literals"><span class="secnum">12.9.4</span> String Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-string-literals-early-errors" title="Static Semantics: Early Errors"><span class="secnum">12.9.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-sv" title="Static Semantics: SV"><span class="secnum">12.9.4.2</span> SS: SV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-string-literals-static-semantics-mv" title="Static Semantics: MV"><span class="secnum">12.9.4.3</span> SS: MV</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-literals-regular-expression-literals" title="Regular Expression Literals"><span class="secnum">12.9.5</span> Regular Expression Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-bodytext" title="Static Semantics: BodyText"><span class="secnum">12.9.5.1</span> SS: BodyText</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-flagtext" title="Static Semantics: FlagText"><span class="secnum">12.9.5.2</span> SS: FlagText</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-template-literal-lexical-components" title="Template Literal Lexical Components"><span class="secnum">12.9.6</span> Template Literal Lexical Components</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-tv" title="Static Semantics: TV"><span class="secnum">12.9.6.1</span> SS: TV</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-static-semantics-trv" title="Static Semantics: TRV"><span class="secnum">12.9.6.2</span> SS: TRV</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-automatic-semicolon-insertion" title="Automatic Semicolon Insertion"><span class="secnum">12.10</span> Automatic Semicolon Insertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-rules-of-automatic-semicolon-insertion" title="Rules of Automatic Semicolon Insertion"><span class="secnum">12.10.1</span> Rules of Automatic Semicolon Insertion</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-examples-of-automatic-semicolon-insertion" title="Examples of Automatic Semicolon Insertion"><span class="secnum">12.10.2</span> Examples of Automatic Semicolon Insertion</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-interesting-cases-of-automatic-semicolon-insertion" title="Interesting Cases of Automatic Semicolon Insertion"><span class="secnum">12.10.3</span> Interesting Cases of Automatic Semicolon Insertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-asi-interesting-cases-in-statement-lists" title="Interesting Cases of Automatic Semicolon Insertion in Statement Lists"><span class="secnum">12.10.3.1</span> Interesting Cases of Automatic Semicolon Insertion in Statement Lists</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-lexical-grammar.html#sec-asi-cases-with-no-lineterminator-here" title="Cases of Automatic Semicolon Insertion and “[no LineTerminator here]”"><span class="secnum">12.10.3.2</span> Cases of Automatic Semicolon Insertion and “[no <emu-nt>LineTerminator</emu-nt> here]”</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-lexical-grammar.html#sec-no-lineterminator-here-automatic-semicolon-insertion-list" title="List of Grammar Productions with Optional Operands and “[no LineTerminator here]”"><span class="secnum">12.10.3.2.1</span> List of Grammar Productions with Optional Operands and “[no <emu-nt>LineTerminator</emu-nt> here]”</a></li></ol></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-ecmascript-language-expressions" title="ECMAScript Language: Expressions"><span class="secnum">13</span> ECMAScript Language: Expressions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-identifiers" title="Identifiers"><span class="secnum">13.1</span> Identifiers</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifiers-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue" title="Static Semantics: StringValue"><span class="secnum">13.1.2</span> SS: StringValue</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifiers-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.1.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression" title="Primary Expression"><span class="secnum">13.2</span> Primary Expression</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-this-keyword" title="The this Keyword"><span class="secnum">13.2.1</span> The <code>this</code> Keyword</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-this-keyword-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-identifier-reference" title="Identifier Reference"><span class="secnum">13.2.2</span> Identifier Reference</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression-literals" title="Literals"><span class="secnum">13.2.3</span> Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-array-initializer" title="Array Initializer"><span class="secnum">13.2.4</span> Array Initializer</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-arrayaccumulation" title="Runtime Semantics: ArrayAccumulation"><span class="secnum">13.2.4.1</span> RS: ArrayAccumulation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-array-initializer-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.4.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-object-initializer" title="Object Initializer"><span class="secnum">13.2.5</span> Object Initializer</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-object-initializer-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-iscomputedpropertykey" title="Static Semantics: IsComputedPropertyKey"><span class="secnum">13.2.5.2</span> SS: IsComputedPropertyKey</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-propertynamelist" title="Static Semantics: PropertyNameList"><span class="secnum">13.2.5.3</span> SS: PropertyNameList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-object-initializer-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.5.4</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydefinitionevaluation" title="Runtime Semantics: PropertyDefinitionEvaluation"><span class="secnum">13.2.5.5</span> RS: PropertyDefinitionEvaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-function-defining-expressions" title="Function Defining Expressions"><span class="secnum">13.2.6</span> Function Defining Expressions</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-primary-expression-regular-expression-literals" title="Regular Expression Literals"><span class="secnum">13.2.7</span> Regular Expression Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-primary-expression-regular-expression-literals-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.7.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-isvalidregularexpressionliteral" title="Static Semantics: IsValidRegularExpressionLiteral ( literal )"><span class="secnum">13.2.7.2</span> SS: IsValidRegularExpressionLiteral ( <var>literal</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-regular-expression-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.7.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-template-literals" title="Template Literals"><span class="secnum">13.2.8</span> Template Literals</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-template-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-static-semantics-templatestrings" title="Static Semantics: TemplateStrings"><span class="secnum">13.2.8.2</span> SS: TemplateStrings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-templatestring" title="Static Semantics: TemplateString ( templateToken, raw )"><span class="secnum">13.2.8.3</span> SS: TemplateString ( <var>templateToken</var>, <var>raw</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-gettemplateobject" title="GetTemplateObject ( templateLiteral )"><span class="secnum">13.2.8.4</span> GetTemplateObject ( <var>templateLiteral</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-substitutionevaluation" title="Runtime Semantics: SubstitutionEvaluation"><span class="secnum">13.2.8.5</span> RS: SubstitutionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-template-literals-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.8.6</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-grouping-operator" title="The Grouping Operator"><span class="secnum">13.2.9</span> The Grouping Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-grouping-operator-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.2.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-grouping-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.2.9.2</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-left-hand-side-expressions" title="Left-Hand-Side Expressions"><span class="secnum">13.3</span> Left-Hand-Side Expressions</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-static-semantics" title="Static Semantics"><span class="secnum">13.3.1</span> Static Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-left-hand-side-expressions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.3.1.1</span> SS: Early Errors</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-property-accessors" title="Property Accessors"><span class="secnum">13.3.2</span> Property Accessors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-property-accessors-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-expression-key" title="EvaluatePropertyAccessWithExpressionKey ( baseValue, expression, strict )"><span class="secnum">13.3.3</span> EvaluatePropertyAccessWithExpressionKey ( <var>baseValue</var>, <var>expression</var>, <var>strict</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-property-access-with-identifier-key" title="EvaluatePropertyAccessWithIdentifierKey ( baseValue, identifierName, strict )"><span class="secnum">13.3.4</span> EvaluatePropertyAccessWithIdentifierKey ( <var>baseValue</var>, <var>identifierName</var>, <var>strict</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-new-operator" title="The new Operator"><span class="secnum">13.3.5</span> The <code>new</code> Operator</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-new-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.5.1</span> RS: Evaluation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatenew" title="EvaluateNew ( constructExpr, arguments )"><span class="secnum">13.3.5.1.1</span> EvaluateNew ( <var>constructExpr</var>, <var>arguments</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-function-calls" title="Function Calls"><span class="secnum">13.3.6</span> Function Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-function-calls-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.6.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatecall" title="EvaluateCall ( func, ref, arguments, tailPosition )"><span class="secnum">13.3.6.2</span> EvaluateCall ( <var>func</var>, <var>ref</var>, <var>arguments</var>, <var>tailPosition</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-super-keyword" title="The super Keyword"><span class="secnum">13.3.7</span> The <code>super</code> Keyword</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-super-keyword-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.7.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-getsuperconstructor" title="GetSuperConstructor ( )"><span class="secnum">13.3.7.2</span> GetSuperConstructor ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-makesuperpropertyreference" title="MakeSuperPropertyReference ( actualThis, propertyKey, strict )"><span class="secnum">13.3.7.3</span> MakeSuperPropertyReference ( <var>actualThis</var>, <var>propertyKey</var>, <var>strict</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-argument-lists" title="Argument Lists"><span class="secnum">13.3.8</span> Argument Lists</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-argumentlistevaluation" title="Runtime Semantics: ArgumentListEvaluation"><span class="secnum">13.3.8.1</span> RS: ArgumentListEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-optional-chains" title="Optional Chains"><span class="secnum">13.3.9</span> Optional Chains</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-optional-chaining-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.9.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-optional-chaining-chain-evaluation" title="Runtime Semantics: ChainEvaluation"><span class="secnum">13.3.9.2</span> RS: ChainEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-import-calls" title="Import Calls"><span class="secnum">13.3.10</span> Import Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-import-call-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.10.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluate-import-call" title="EvaluateImportCall ( specifierExpression [ , optionsExpression ] )"><span class="secnum">13.3.10.2</span> EvaluateImportCall ( <var>specifierExpression</var> [ , <var>optionsExpression</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-ContinueDynamicImport" title="ContinueDynamicImport ( promiseCapability, moduleCompletion )"><span class="secnum">13.3.10.3</span> ContinueDynamicImport ( <var>promiseCapability</var>, <var>moduleCompletion</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-tagged-templates" title="Tagged Templates"><span class="secnum">13.3.11</span> Tagged Templates</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-tagged-templates-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.11.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-meta-properties" title="Meta Properties"><span class="secnum">13.3.12</span> Meta Properties</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-meta-properties-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.3.12.1</span> RS: Evaluation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-hostgetimportmetaproperties" title="HostGetImportMetaProperties ( moduleRecord )"><span class="secnum">13.3.12.1.1</span> HostGetImportMetaProperties ( <var>moduleRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-hostfinalizeimportmeta" title="HostFinalizeImportMeta ( importMeta, moduleRecord )"><span class="secnum">13.3.12.1.2</span> HostFinalizeImportMeta ( <var>importMeta</var>, <var>moduleRecord</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-update-expressions" title="Update Expressions"><span class="secnum">13.4</span> Update Expressions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-update-expressions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-postfix-increment-operator" title="Postfix Increment Operator"><span class="secnum">13.4.2</span> Postfix Increment Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-postfix-increment-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-postfix-decrement-operator" title="Postfix Decrement Operator"><span class="secnum">13.4.3</span> Postfix Decrement Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-postfix-decrement-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-prefix-increment-operator" title="Prefix Increment Operator"><span class="secnum">13.4.4</span> Prefix Increment Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-prefix-increment-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-prefix-decrement-operator" title="Prefix Decrement Operator"><span class="secnum">13.4.5</span> Prefix Decrement Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-prefix-decrement-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.4.5.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-operators" title="Unary Operators"><span class="secnum">13.5</span> Unary Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-delete-operator" title="The delete Operator"><span class="secnum">13.5.1</span> The <code>delete</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-delete-operator-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.5.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-delete-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.1.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-void-operator" title="The void Operator"><span class="secnum">13.5.2</span> The <code>void</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-void-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-typeof-operator" title="The typeof Operator"><span class="secnum">13.5.3</span> The <code>typeof</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-typeof-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.3.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-plus-operator" title="Unary + Operator"><span class="secnum">13.5.4</span> Unary <code>+</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unary-plus-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unary-minus-operator" title="Unary - Operator"><span class="secnum">13.5.5</span> Unary <code>-</code> Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unary-minus-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.5.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-bitwise-not-operator" title="Bitwise NOT Operator ( ~ )"><span class="secnum">13.5.6</span> Bitwise NOT Operator ( <code>~</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-bitwise-not-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.6.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-logical-not-operator" title="Logical NOT Operator ( ! )"><span class="secnum">13.5.7</span> Logical NOT Operator ( <code>!</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-logical-not-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.5.7.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-exp-operator" title="Exponentiation Operator"><span class="secnum">13.6</span> Exponentiation Operator</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-exp-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.6.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-multiplicative-operators" title="Multiplicative Operators"><span class="secnum">13.7</span> Multiplicative Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-multiplicative-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.7.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-additive-operators" title="Additive Operators"><span class="secnum">13.8</span> Additive Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-addition-operator-plus" title="The Addition Operator ( + )"><span class="secnum">13.8.1</span> The Addition Operator ( <code>+</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-addition-operator-plus-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.8.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-subtraction-operator-minus" title="The Subtraction Operator ( - )"><span class="secnum">13.8.2</span> The Subtraction Operator ( <code>-</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-subtraction-operator-minus-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.8.2.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-bitwise-shift-operators" title="Bitwise Shift Operators"><span class="secnum">13.9</span> Bitwise Shift Operators</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-left-shift-operator" title="The Left Shift Operator ( << )"><span class="secnum">13.9.1</span> The Left Shift Operator ( <code>&lt;&lt;</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-left-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-signed-right-shift-operator" title="The Signed Right Shift Operator ( >> )"><span class="secnum">13.9.2</span> The Signed Right Shift Operator ( <code>&gt;&gt;</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-signed-right-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-unsigned-right-shift-operator" title="The Unsigned Right Shift Operator ( >>> )"><span class="secnum">13.9.3</span> The Unsigned Right Shift Operator ( <code>&gt;&gt;&gt;</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-unsigned-right-shift-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.9.3.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-relational-operators" title="Relational Operators"><span class="secnum">13.10</span> Relational Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-relational-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.10.1</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-instanceofoperator" title="InstanceofOperator ( V, target )"><span class="secnum">13.10.2</span> InstanceofOperator ( <var>V</var>, <var>target</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-equality-operators" title="Equality Operators"><span class="secnum">13.11</span> Equality Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-equality-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.11.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-binary-bitwise-operators" title="Binary Bitwise Operators"><span class="secnum">13.12</span> Binary Bitwise Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-binary-bitwise-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.12.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-binary-logical-operators" title="Binary Logical Operators"><span class="secnum">13.13</span> Binary Logical Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-binary-logical-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.13.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-conditional-operator" title="Conditional Operator ( ? : )"><span class="secnum">13.14</span> Conditional Operator ( <code>? :</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-conditional-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.14.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-assignment-operators" title="Assignment Operators"><span class="secnum">13.15</span> Assignment Operators</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-assignment-operators-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.15.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-assignment-operators-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.15.2</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-applystringornumericbinaryoperator" title="ApplyStringOrNumericBinaryOperator ( lVal, opText, rVal )"><span class="secnum">13.15.3</span> ApplyStringOrNumericBinaryOperator ( <var>lVal</var>, <var>opText</var>, <var>rVal</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-evaluatestringornumericbinaryexpression" title="EvaluateStringOrNumericBinaryExpression ( leftOperand, opText, rightOperand )"><span class="secnum">13.15.4</span> EvaluateStringOrNumericBinaryExpression ( <var>leftOperand</var>, <var>opText</var>, <var>rightOperand</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-destructuring-assignment" title="Destructuring Assignment"><span class="secnum">13.15.5</span> Destructuring Assignment</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-destructuring-assignment-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">13.15.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-destructuringassignmentevaluation" title="Runtime Semantics: DestructuringAssignmentEvaluation"><span class="secnum">13.15.5.2</span> RS: DestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-propertydestructuringassignmentevaluation" title="Runtime Semantics: PropertyDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.3</span> RS: PropertyDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-restdestructuringassignmentevaluation" title="Runtime Semantics: RestDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.4</span> RS: RestDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-iteratordestructuringassignmentevaluation" title="Runtime Semantics: IteratorDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.5</span> RS: IteratorDestructuringAssignmentEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-runtime-semantics-keyeddestructuringassignmentevaluation" title="Runtime Semantics: KeyedDestructuringAssignmentEvaluation"><span class="secnum">13.15.5.6</span> RS: KeyedDestructuringAssignmentEvaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-expressions.html#sec-comma-operator" title="Comma Operator ( , )"><span class="secnum">13.16</span> Comma Operator ( <code>,</code> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-expressions.html#sec-comma-operator-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">13.16.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-ecmascript-language-statements-and-declarations" title="ECMAScript Language: Statements and Declarations"><span class="secnum">14</span> ECMAScript Language: Statements and Declarations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-statement-semantics" title="Statement Semantics"><span class="secnum">14.1</span> Statement Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-statement-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.1.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-block" title="Block"><span class="secnum">14.2</span> Block</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-block-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-block-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.2.2</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-blockdeclarationinstantiation" title="BlockDeclarationInstantiation ( code, env )"><span class="secnum">14.2.3</span> BlockDeclarationInstantiation ( <var>code</var>, <var>env</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-declarations-and-the-variable-statement" title="Declarations and the Variable Statement"><span class="secnum">14.3</span> Declarations and the Variable Statement</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations" title="Let and Const Declarations"><span class="secnum">14.3.1</span> Let and Const Declarations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.3.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.3.1.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-variable-statement" title="Variable Statement"><span class="secnum">14.3.2</span> Variable Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-variable-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.3.2.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns" title="Destructuring Binding Patterns"><span class="secnum">14.3.3</span> Destructuring Binding Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns-runtime-semantics-propertybindinginitialization" title="Runtime Semantics: PropertyBindingInitialization"><span class="secnum">14.3.3.1</span> RS: PropertyBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-destructuring-binding-patterns-runtime-semantics-restbindinginitialization" title="Runtime Semantics: RestBindingInitialization"><span class="secnum">14.3.3.2</span> RS: RestBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-keyedbindinginitialization" title="Runtime Semantics: KeyedBindingInitialization"><span class="secnum">14.3.3.3</span> RS: KeyedBindingInitialization</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-empty-statement" title="Empty Statement"><span class="secnum">14.4</span> Empty Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-empty-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.4.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-expression-statement" title="Expression Statement"><span class="secnum">14.5</span> Expression Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-expression-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.5.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement" title="The if Statement"><span class="secnum">14.6</span> The <code>if</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.6.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-if-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.6.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-iteration-statements" title="Iteration Statements"><span class="secnum">14.7</span> Iteration Statements</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-iteration-statements-semantics" title="Semantics"><span class="secnum">14.7.1</span> Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-loopcontinues" title="LoopContinues ( completion, labelSet )"><span class="secnum">14.7.1.1</span> LoopContinues ( <var>completion</var>, <var>labelSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-loopevaluation" title="Runtime Semantics: LoopEvaluation"><span class="secnum">14.7.1.2</span> RS: LoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-do-while-statement" title="The do-while Statement"><span class="secnum">14.7.2</span> The <code>do</code>-<code>while</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-do-while-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-dowhileloopevaluation" title="Runtime Semantics: DoWhileLoopEvaluation"><span class="secnum">14.7.2.2</span> RS: DoWhileLoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-while-statement" title="The while Statement"><span class="secnum">14.7.3</span> The <code>while</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-while-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-whileloopevaluation" title="Runtime Semantics: WhileLoopEvaluation"><span class="secnum">14.7.3.2</span> RS: WhileLoopEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-statement" title="The for Statement"><span class="secnum">14.7.4</span> The <code>for</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forloopevaluation" title="Runtime Semantics: ForLoopEvaluation"><span class="secnum">14.7.4.2</span> RS: ForLoopEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-forbodyevaluation" title="ForBodyEvaluation ( test, increment, stmt, perIterationBindings, labelSet )"><span class="secnum">14.7.4.3</span> ForBodyEvaluation ( <var>test</var>, <var>increment</var>, <var>stmt</var>, <var>perIterationBindings</var>, <var>labelSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-createperiterationenvironment" title="CreatePerIterationEnvironment ( perIterationBindings )"><span class="secnum">14.7.4.4</span> CreatePerIterationEnvironment ( <var>perIterationBindings</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements" title="The for-in, for-of, and for-await-of Statements"><span class="secnum">14.7.5</span> The <code>for</code>-<code>in</code>, <code>for</code>-<code>of</code>, and <code>for</code>-<code>await</code>-<code>of</code> Statements</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.7.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-static-semantics-isdestructuring" title="Static Semantics: IsDestructuring"><span class="secnum">14.7.5.2</span> SS: IsDestructuring</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-fordeclarationbindinginitialization" title="Runtime Semantics: ForDeclarationBindingInitialization"><span class="secnum">14.7.5.3</span> RS: ForDeclarationBindingInitialization</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-fordeclarationbindinginstantiation" title="Runtime Semantics: ForDeclarationBindingInstantiation"><span class="secnum">14.7.5.4</span> RS: ForDeclarationBindingInstantiation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forinofloopevaluation" title="Runtime Semantics: ForInOfLoopEvaluation"><span class="secnum">14.7.5.5</span> RS: ForInOfLoopEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forinofheadevaluation" title="ForIn/OfHeadEvaluation ( uninitializedBoundNames, expr, iterationKind )"><span class="secnum">14.7.5.6</span> ForIn/OfHeadEvaluation ( <var>uninitializedBoundNames</var>, <var>expr</var>, <var>iterationKind</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset" title="ForIn/OfBodyEvaluation ( lhs, stmt, iteratorRecord, iterationKind, lhsKind, labelSet [ , iteratorKind ] )"><span class="secnum">14.7.5.7</span> ForIn/OfBodyEvaluation ( <var>lhs</var>, <var>stmt</var>, <var>iteratorRecord</var>, <var>iterationKind</var>, <var>lhsKind</var>, <var>labelSet</var> [ , <var>iteratorKind</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-and-for-of-statements-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.7.5.8</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-enumerate-object-properties" title="EnumerateObjectProperties ( O )"><span class="secnum">14.7.5.9</span> EnumerateObjectProperties ( <var>O</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-for-in-iterator-objects" title="For-In Iterator Objects"><span class="secnum">14.7.5.10</span> For-In Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-createforiniterator" title="CreateForInIterator ( object )"><span class="secnum">14.7.5.10.1</span> CreateForInIterator ( <var>object</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-%foriniteratorprototype%-object" title="The %ForInIteratorPrototype% Object"><span class="secnum">14.7.5.10.2</span> The %ForInIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-%foriniteratorprototype%.next" title="%ForInIteratorPrototype%.next ( )"><span class="secnum">14.7.5.10.2.1</span> %ForInIteratorPrototype%.next ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-properties-of-for-in-iterator-instances" title="Properties of For-In Iterator Instances"><span class="secnum">14.7.5.10.3</span> Properties of For-In Iterator Instances</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement" title="The continue Statement"><span class="secnum">14.8</span> The <code>continue</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-continue-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.8.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement" title="The break Statement"><span class="secnum">14.9</span> The <code>break</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-break-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.9.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-return-statement" title="The return Statement"><span class="secnum">14.10</span> The <code>return</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-return-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.10.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement" title="The with Statement"><span class="secnum">14.11</span> The <code>with</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.11.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-with-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.11.2</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement" title="The switch Statement"><span class="secnum">14.12</span> The <code>switch</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.12.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-caseblockevaluation" title="Runtime Semantics: CaseBlockEvaluation"><span class="secnum">14.12.2</span> RS: CaseBlockEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-caseclauseisselected" title="CaseClauseIsSelected ( C, input )"><span class="secnum">14.12.3</span> CaseClauseIsSelected ( <var>C</var>, <var>input</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-switch-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.12.4</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements" title="Labelled Statements"><span class="secnum">14.13</span> Labelled Statements</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.13.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-islabelledfunction" title="Static Semantics: IsLabelledFunction ( stmt )"><span class="secnum">14.13.2</span> SS: IsLabelledFunction ( <var>stmt</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-labelled-statements-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.13.3</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-labelledevaluation" title="Runtime Semantics: LabelledEvaluation"><span class="secnum">14.13.4</span> RS: LabelledEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-throw-statement" title="The throw Statement"><span class="secnum">14.14</span> The <code>throw</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-throw-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.14.1</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement" title="The try Statement"><span class="secnum">14.15</span> The <code>try</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">14.15.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-catchclauseevaluation" title="Runtime Semantics: CatchClauseEvaluation"><span class="secnum">14.15.2</span> RS: CatchClauseEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-try-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.15.3</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-statements-and-declarations.html#sec-debugger-statement" title="The debugger Statement"><span class="secnum">14.16</span> The <code>debugger</code> Statement</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-statements-and-declarations.html#sec-debugger-statement-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">14.16.1</span> RS: Evaluation</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-ecmascript-language-functions-and-classes" title="ECMAScript Language: Functions and Classes"><span class="secnum">15</span> ECMAScript Language: Functions and Classes</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-parameter-lists" title="Parameter Lists"><span class="secnum">15.1</span> Parameter Lists</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-parameter-lists-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression" title="Static Semantics: ContainsExpression"><span class="secnum">15.1.2</span> SS: ContainsExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist" title="Static Semantics: IsSimpleParameterList"><span class="secnum">15.1.3</span> SS: IsSimpleParameterList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer" title="Static Semantics: HasInitializer"><span class="secnum">15.1.4</span> SS: HasInitializer</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-expectedargumentcount" title="Static Semantics: ExpectedArgumentCount"><span class="secnum">15.1.5</span> SS: ExpectedArgumentCount</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions" title="Function Definitions"><span class="secnum">15.2</span> Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict" title="Static Semantics: FunctionBodyContainsUseStrict"><span class="secnum">15.2.2</span> SS: FunctionBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluatefunctionbody" title="Runtime Semantics: EvaluateFunctionBody"><span class="secnum">15.2.3</span> RS: EvaluateFunctionBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateordinaryfunctionobject" title="Runtime Semantics: InstantiateOrdinaryFunctionObject"><span class="secnum">15.2.4</span> RS: InstantiateOrdinaryFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateordinaryfunctionexpression" title="Runtime Semantics: InstantiateOrdinaryFunctionExpression"><span class="secnum">15.2.5</span> RS: InstantiateOrdinaryFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.2.6</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions" title="Arrow Function Definitions"><span class="secnum">15.3</span> Arrow Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-concisebodycontainsusestrict" title="Static Semantics: ConciseBodyContainsUseStrict"><span class="secnum">15.3.2</span> SS: ConciseBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateconcisebody" title="Runtime Semantics: EvaluateConciseBody"><span class="secnum">15.3.3</span> RS: EvaluateConciseBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiatearrowfunctionexpression" title="Runtime Semantics: InstantiateArrowFunctionExpression"><span class="secnum">15.3.4</span> RS: InstantiateArrowFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-arrow-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.3.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-method-definitions" title="Method Definitions"><span class="secnum">15.4</span> Method Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-method-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.4.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper" title="Static Semantics: HasDirectSuper"><span class="secnum">15.4.2</span> SS: HasDirectSuper</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-specialmethod" title="Static Semantics: SpecialMethod"><span class="secnum">15.4.3</span> SS: SpecialMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-definemethod" title="Runtime Semantics: DefineMethod"><span class="secnum">15.4.4</span> RS: DefineMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-methoddefinitionevaluation" title="Runtime Semantics: MethodDefinitionEvaluation"><span class="secnum">15.4.5</span> RS: MethodDefinitionEvaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions" title="Generator Function Definitions"><span class="secnum">15.5</span> Generator Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.5.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluategeneratorbody" title="Runtime Semantics: EvaluateGeneratorBody"><span class="secnum">15.5.2</span> RS: EvaluateGeneratorBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiategeneratorfunctionobject" title="Runtime Semantics: InstantiateGeneratorFunctionObject"><span class="secnum">15.5.3</span> RS: InstantiateGeneratorFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiategeneratorfunctionexpression" title="Runtime Semantics: InstantiateGeneratorFunctionExpression"><span class="secnum">15.5.4</span> RS: InstantiateGeneratorFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-generator-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.5.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-generator-function-definitions" title="Async Generator Function Definitions"><span class="secnum">15.6</span> Async Generator Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-generator-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.6.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncgeneratorbody" title="Runtime Semantics: EvaluateAsyncGeneratorBody"><span class="secnum">15.6.2</span> RS: EvaluateAsyncGeneratorBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncgeneratorfunctionobject" title="Runtime Semantics: InstantiateAsyncGeneratorFunctionObject"><span class="secnum">15.6.3</span> RS: InstantiateAsyncGeneratorFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncgeneratorfunctionexpression" title="Runtime Semantics: InstantiateAsyncGeneratorFunctionExpression"><span class="secnum">15.6.4</span> RS: InstantiateAsyncGeneratorFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-asyncgenerator-definitions-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.6.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions" title="Class Definitions"><span class="secnum">15.7</span> Class Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.7.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementkind" title="Static Semantics: ClassElementKind"><span class="secnum">15.7.2</span> SS: ClassElementKind</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-constructormethod" title="Static Semantics: ConstructorMethod"><span class="secnum">15.7.3</span> SS: ConstructorMethod</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-isstatic" title="Static Semantics: IsStatic"><span class="secnum">15.7.4</span> SS: IsStatic</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-nonconstructorelements" title="Static Semantics: NonConstructorElements"><span class="secnum">15.7.5</span> SS: NonConstructorElements</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-prototypepropertynamelist" title="Static Semantics: PrototypePropertyNameList"><span class="secnum">15.7.6</span> SS: PrototypePropertyNameList</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid" title="Static Semantics: AllPrivateIdentifiersValid"><span class="secnum">15.7.7</span> SS: AllPrivateIdentifiersValid</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers" title="Static Semantics: PrivateBoundIdentifiers"><span class="secnum">15.7.8</span> SS: PrivateBoundIdentifiers</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsarguments" title="Static Semantics: ContainsArguments"><span class="secnum">15.7.9</span> SS: ContainsArguments</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classfielddefinitionevaluation" title="Runtime Semantics: ClassFieldDefinitionEvaluation"><span class="secnum">15.7.10</span> RS: ClassFieldDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classstaticblockdefinitionevaluation" title="Runtime Semantics: ClassStaticBlockDefinitionEvaluation"><span class="secnum">15.7.11</span> RS: ClassStaticBlockDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateclassstaticblockbody" title="Runtime Semantics: EvaluateClassStaticBlockBody"><span class="secnum">15.7.12</span> RS: EvaluateClassStaticBlockBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementevaluation" title="Runtime Semantics: ClassElementEvaluation"><span class="secnum">15.7.13</span> RS: ClassElementEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classdefinitionevaluation" title="Runtime Semantics: ClassDefinitionEvaluation"><span class="secnum">15.7.14</span> RS: ClassDefinitionEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-bindingclassdeclarationevaluation" title="Runtime Semantics: BindingClassDeclarationEvaluation"><span class="secnum">15.7.15</span> RS: BindingClassDeclarationEvaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-class-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.7.16</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions" title="Async Function Definitions"><span class="secnum">15.8</span> Async Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.8.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncfunctionobject" title="Runtime Semantics: InstantiateAsyncFunctionObject"><span class="secnum">15.8.2</span> RS: InstantiateAsyncFunctionObject</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncfunctionexpression" title="Runtime Semantics: InstantiateAsyncFunctionExpression"><span class="secnum">15.8.3</span> RS: InstantiateAsyncFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncfunctionbody" title="Runtime Semantics: EvaluateAsyncFunctionBody"><span class="secnum">15.8.4</span> RS: EvaluateAsyncFunctionBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.8.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions" title="Async Arrow Function Definitions"><span class="secnum">15.9</span> Async Arrow Function Definitions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">15.9.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-asyncconcisebodycontainsusestrict" title="Static Semantics: AsyncConciseBodyContainsUseStrict"><span class="secnum">15.9.2</span> SS: AsyncConciseBodyContainsUseStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-evaluateasyncconcisebody" title="Runtime Semantics: EvaluateAsyncConciseBody"><span class="secnum">15.9.3</span> RS: EvaluateAsyncConciseBody</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncarrowfunctionexpression" title="Runtime Semantics: InstantiateAsyncArrowFunctionExpression"><span class="secnum">15.9.4</span> RS: InstantiateAsyncArrowFunctionExpression</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-async-arrow-function-definitions-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">15.9.5</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-functions-and-classes.html#sec-tail-position-calls" title="Tail Position Calls"><span class="secnum">15.10</span> Tail Position Calls</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-isintailposition" title="Static Semantics: IsInTailPosition ( call )"><span class="secnum">15.10.1</span> SS: IsInTailPosition ( <var>call</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition" title="Static Semantics: HasCallInTailPosition"><span class="secnum">15.10.2</span> SS: HasCallInTailPosition</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-functions-and-classes.html#sec-preparefortailcall" title="PrepareForTailCall ( )"><span class="secnum">15.10.3</span> PrepareForTailCall ( )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-ecmascript-language-scripts-and-modules" title="ECMAScript Language: Scripts and Modules"><span class="secnum">16</span> ECMAScript Language: Scripts and Modules</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-scripts" title="Scripts"><span class="secnum">16.1</span> Scripts</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-scripts-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-scriptisstrict" title="Static Semantics: ScriptIsStrict"><span class="secnum">16.1.2</span> SS: ScriptIsStrict</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-script-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.1.3</span> RS: Evaluation</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-script-records" title="Script Records"><span class="secnum">16.1.4</span> Script Records</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parse-script" title="ParseScript ( sourceText, realm, hostDefined )"><span class="secnum">16.1.5</span> ParseScript ( <var>sourceText</var>, <var>realm</var>, <var>hostDefined</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-runtime-semantics-scriptevaluation" title="ScriptEvaluation ( scriptRecord )"><span class="secnum">16.1.6</span> ScriptEvaluation ( <var>scriptRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-globaldeclarationinstantiation" title="GlobalDeclarationInstantiation ( script, env )"><span class="secnum">16.1.7</span> GlobalDeclarationInstantiation ( <var>script</var>, <var>env</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-modules" title="Modules"><span class="secnum">16.2</span> Modules</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics" title="Module Semantics"><span class="secnum">16.2.1</span> Module Semantics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-importedlocalnames" title="Static Semantics: ImportedLocalNames ( importEntries )"><span class="secnum">16.2.1.2</span> SS: ImportedLocalNames ( <var>importEntries</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-modulerequest-record" title="ModuleRequest Records"><span class="secnum">16.2.1.3</span> ModuleRequest Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-ModuleRequestsEqual" title="ModuleRequestsEqual ( left, right )"><span class="secnum">16.2.1.3.1</span> ModuleRequestsEqual ( <var>left</var>, <var>right</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-modulerequests" title="Static Semantics: ModuleRequests"><span class="secnum">16.2.1.4</span> SS: ModuleRequests</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-abstract-module-records" title="Abstract Module Records"><span class="secnum">16.2.1.5</span> Abstract Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-EvaluateModuleSync" title="EvaluateModuleSync ( module )"><span class="secnum">16.2.1.5.1</span> EvaluateModuleSync ( <var>module</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-cyclic-module-records" title="Cyclic Module Records"><span class="secnum">16.2.1.6</span> Cyclic Module Records</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-cyclic-module-record-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.6.1</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-LoadRequestedModules" title="LoadRequestedModules ( [ hostDefined ] )"><span class="secnum">16.2.1.6.1.1</span> LoadRequestedModules ( [ <var>hostDefined</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLoading" title="InnerModuleLoading ( state, module )"><span class="secnum">16.2.1.6.1.1.1</span> InnerModuleLoading ( <var>state</var>, <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-ContinueModuleLoading" title="ContinueModuleLoading ( state, moduleCompletion )"><span class="secnum">16.2.1.6.1.1.2</span> ContinueModuleLoading ( <var>state</var>, <var>moduleCompletion</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-moduledeclarationlinking" title="Link ( )"><span class="secnum">16.2.1.6.1.2</span> Link ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-InnerModuleLinking" title="InnerModuleLinking ( module, stack, index )"><span class="secnum">16.2.1.6.1.2.1</span> InnerModuleLinking ( <var>module</var>, <var>stack</var>, <var>index</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-moduleevaluation" title="Evaluate ( )"><span class="secnum">16.2.1.6.1.3</span> Evaluate ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-innermoduleevaluation" title="InnerModuleEvaluation ( module, stack, index )"><span class="secnum">16.2.1.6.1.3.1</span> InnerModuleEvaluation ( <var>module</var>, <var>stack</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-execute-async-module" title="ExecuteAsyncModule ( module )"><span class="secnum">16.2.1.6.1.3.2</span> ExecuteAsyncModule ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-gather-available-ancestors" title="GatherAvailableAncestors ( module, execList )"><span class="secnum">16.2.1.6.1.3.3</span> GatherAvailableAncestors ( <var>module</var>, <var>execList</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-fulfilled" title="AsyncModuleExecutionFulfilled ( module )"><span class="secnum">16.2.1.6.1.3.4</span> AsyncModuleExecutionFulfilled ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-async-module-execution-rejected" title="AsyncModuleExecutionRejected ( module, error )"><span class="secnum">16.2.1.6.1.3.5</span> AsyncModuleExecutionRejected ( <var>module</var>, <var>error</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-example-cyclic-module-record-graphs" title="Example Cyclic Module Record Graphs"><span class="secnum">16.2.1.6.2</span> Example Cyclic Module Record Graphs</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-records" title="Source Text Module Records"><span class="secnum">16.2.1.7</span> Source Text Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parsemodule" title="ParseModule ( sourceText, realm, hostDefined )"><span class="secnum">16.2.1.7.1</span> ParseModule ( <var>sourceText</var>, <var>realm</var>, <var>hostDefined</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.7.2</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-getexportednames" title="GetExportedNames ( [ exportStarSet ] )"><span class="secnum">16.2.1.7.2.1</span> GetExportedNames ( [ <var>exportStarSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-resolveexport" title="ResolveExport ( exportName [ , resolveSet ] )"><span class="secnum">16.2.1.7.2.2</span> ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-cyclic-module-record-methods" title="Implementation of Cyclic Module Record Abstract Methods"><span class="secnum">16.2.1.7.3</span> Implementation of Cyclic Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-initialize-environment" title="InitializeEnvironment ( )"><span class="secnum">16.2.1.7.3.1</span> InitializeEnvironment ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-source-text-module-record-execute-module" title="ExecuteModule ( [ capability ] )"><span class="secnum">16.2.1.7.3.2</span> ExecuteModule ( [ <var>capability</var> ] )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-synthetic-module-records" title="Synthetic Module Records"><span class="secnum">16.2.1.8</span> Synthetic Module Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-create-default-export-synthetic-module" title="CreateDefaultExportSyntheticModule ( defaultExport )"><span class="secnum">16.2.1.8.1</span> CreateDefaultExportSyntheticModule ( <var>defaultExport</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-parse-json-module" title="ParseJSONModule ( source )"><span class="secnum">16.2.1.8.2</span> ParseJSONModule ( <var>source</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-setsyntheticmoduleexport" title="SetSyntheticModuleExport ( module, exportName, exportValue )"><span class="secnum">16.2.1.8.3</span> SetSyntheticModuleExport ( <var>module</var>, <var>exportName</var>, <var>exportValue</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-module-record-methods" title="Implementation of Module Record Abstract Methods"><span class="secnum">16.2.1.8.4</span> Implementation of Module Record Abstract Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-LoadRequestedModules" title="LoadRequestedModules ( [ hostDefined ] )"><span class="secnum">16.2.1.8.4.1</span> LoadRequestedModules ( [ <var>hostDefined</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-getexportednames" title="GetExportedNames ( [ exportStarSet ] )"><span class="secnum">16.2.1.8.4.2</span> GetExportedNames ( [ <var>exportStarSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-resolveexport" title="ResolveExport ( exportName [ , resolveSet ] )"><span class="secnum">16.2.1.8.4.3</span> ResolveExport ( <var>exportName</var> [ , <var>resolveSet</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-Link" title="Link ( )"><span class="secnum">16.2.1.8.4.4</span> Link ( )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-smr-Evaluate" title="Evaluate ( )"><span class="secnum">16.2.1.8.4.5</span> Evaluate ( )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-GetImportedModule" title="GetImportedModule ( referrer, request )"><span class="secnum">16.2.1.9</span> GetImportedModule ( <var>referrer</var>, <var>request</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-HostLoadImportedModule" title="HostLoadImportedModule ( referrer, moduleRequest, hostDefined, payload )"><span class="secnum">16.2.1.10</span> HostLoadImportedModule ( <var>referrer</var>, <var>moduleRequest</var>, <var>hostDefined</var>, <var>payload</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-FinishLoadingImportedModule" title="FinishLoadingImportedModule ( referrer, moduleRequest, payload, result )"><span class="secnum">16.2.1.11</span> FinishLoadingImportedModule ( <var>referrer</var>, <var>moduleRequest</var>, <var>payload</var>, <var>result</var> )</a></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-AllImportAttributesSupported" title="AllImportAttributesSupported ( attributes )"><span class="secnum">16.2.1.12</span> AllImportAttributesSupported ( <var>attributes</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-hostgetsupportedimportattributes" title="HostGetSupportedImportAttributes ( )"><span class="secnum">16.2.1.12.1</span> HostGetSupportedImportAttributes ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-getmodulenamespace" title="GetModuleNamespace ( module )"><span class="secnum">16.2.1.13</span> GetModuleNamespace ( <var>module</var> )</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-module-semantics-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.2.1.14</span> RS: Evaluation</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-imports" title="Imports"><span class="secnum">16.2.2</span> Imports</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-imports-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentries" title="Static Semantics: ImportEntries"><span class="secnum">16.2.2.2</span> SS: ImportEntries</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-importentriesformodule" title="Static Semantics: ImportEntriesForModule"><span class="secnum">16.2.2.3</span> SS: ImportEntriesForModule</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-withclausetoattributes" title="Static Semantics: WithClauseToAttributes"><span class="secnum">16.2.2.4</span> SS: WithClauseToAttributes</a></li></ol></li><li><span class="item-toggle">+</span><a href="ecmascript-language-scripts-and-modules.html#sec-exports" title="Exports"><span class="secnum">16.2.3</span> Exports</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-exports-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">16.2.3.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportedbindings" title="Static Semantics: ExportedBindings"><span class="secnum">16.2.3.2</span> SS: ExportedBindings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportednames" title="Static Semantics: ExportedNames"><span class="secnum">16.2.3.3</span> SS: ExportedNames</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentries" title="Static Semantics: ExportEntries"><span class="secnum">16.2.3.4</span> SS: ExportEntries</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-exportentriesformodule" title="Static Semantics: ExportEntriesForModule"><span class="secnum">16.2.3.5</span> SS: ExportEntriesForModule</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-static-semantics-referencedbindings" title="Static Semantics: ReferencedBindings"><span class="secnum">16.2.3.6</span> SS: ReferencedBindings</a></li><li><span class="item-toggle-none"></span><a href="ecmascript-language-scripts-and-modules.html#sec-exports-runtime-semantics-evaluation" title="Runtime Semantics: Evaluation"><span class="secnum">16.2.3.7</span> RS: Evaluation</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="error-handling-and-language-extensions.html#sec-error-handling-and-language-extensions" title="Error Handling and Language Extensions"><span class="secnum">17</span> Error Handling and Language Extensions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="error-handling-and-language-extensions.html#sec-forbidden-extensions" title="Forbidden Extensions"><span class="secnum">17.1</span> Forbidden Extensions</a></li></ol></li><li><span class="item-toggle-none"></span><a href="ecmascript-standard-built-in-objects.html#sec-ecmascript-standard-built-in-objects" title="ECMAScript Standard Built-in Objects"><span class="secnum">18</span> ECMAScript Standard Built-in Objects</a></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-global-object" title="The Global Object"><span class="secnum">19</span> The Global Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="global-object.html#sec-value-properties-of-the-global-object" title="Value Properties of the Global Object"><span class="secnum">19.1</span> Value Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-globalthis" title="globalThis"><span class="secnum">19.1.1</span> globalThis</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-value-properties-of-the-global-object-infinity" title="Infinity"><span class="secnum">19.1.2</span> Infinity</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-value-properties-of-the-global-object-nan" title="NaN"><span class="secnum">19.1.3</span> NaN</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-undefined" title="undefined"><span class="secnum">19.1.4</span> undefined</a></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-function-properties-of-the-global-object" title="Function Properties of the Global Object"><span class="secnum">19.2</span> Function Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="global-object.html#sec-eval-x" title="eval ( x )"><span class="secnum">19.2.1</span> eval ( <var>x</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-performeval" title="PerformEval ( x, strictCaller, direct )"><span class="secnum">19.2.1.1</span> PerformEval ( <var>x</var>, <var>strictCaller</var>, <var>direct</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-hostensurecancompilestrings" title="HostEnsureCanCompileStrings ( calleeRealm, parameterStrings, bodyString, direct )"><span class="secnum">19.2.1.2</span> HostEnsureCanCompileStrings ( <var>calleeRealm</var>, <var>parameterStrings</var>, <var>bodyString</var>, <var>direct</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-evaldeclarationinstantiation" title="EvalDeclarationInstantiation ( body, varEnv, lexEnv, privateEnv, strict )"><span class="secnum">19.2.1.3</span> EvalDeclarationInstantiation ( <var>body</var>, <var>varEnv</var>, <var>lexEnv</var>, <var>privateEnv</var>, <var>strict</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-isfinite-number" title="isFinite ( number )"><span class="secnum">19.2.2</span> isFinite ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-isnan-number" title="isNaN ( number )"><span class="secnum">19.2.3</span> isNaN ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parsefloat-string" title="parseFloat ( string )"><span class="secnum">19.2.4</span> parseFloat ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parseint-string-radix" title="parseInt ( string, radix )"><span class="secnum">19.2.5</span> parseInt ( <var>string</var>, <var>radix</var> )</a></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-uri-handling-functions" title="URI Handling Functions"><span class="secnum">19.2.6</span> URI Handling Functions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decodeuri-encodeduri" title="decodeURI ( encodedURI )"><span class="secnum">19.2.6.1</span> decodeURI ( <var>encodedURI</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decodeuricomponent-encodeduricomponent" title="decodeURIComponent ( encodedURIComponent )"><span class="secnum">19.2.6.2</span> decodeURIComponent ( <var>encodedURIComponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encodeuri-uri" title="encodeURI ( uri )"><span class="secnum">19.2.6.3</span> encodeURI ( <var>uri</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encodeuricomponent-uricomponent" title="encodeURIComponent ( uriComponent )"><span class="secnum">19.2.6.4</span> encodeURIComponent ( <var>uriComponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-encode" title="Encode ( string, extraUnescaped )"><span class="secnum">19.2.6.5</span> Encode ( <var>string</var>, <var>extraUnescaped</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-decode" title="Decode ( string, preserveEscapeSet )"><span class="secnum">19.2.6.6</span> Decode ( <var>string</var>, <var>preserveEscapeSet</var> )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-parsehexoctet" title="ParseHexOctet ( string, position )"><span class="secnum">19.2.6.7</span> ParseHexOctet ( <var>string</var>, <var>position</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-constructor-properties-of-the-global-object" title="Constructor Properties of the Global Object"><span class="secnum">19.3</span> Constructor Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-aggregate-error" title="AggregateError ( . . . )"><span class="secnum">19.3.1</span> AggregateError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-array" title="Array ( . . . )"><span class="secnum">19.3.2</span> Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-arraybuffer" title="ArrayBuffer ( . . . )"><span class="secnum">19.3.3</span> ArrayBuffer ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-bigint" title="BigInt ( . . . )"><span class="secnum">19.3.4</span> BigInt ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-bigint64array" title="BigInt64Array ( . . . )"><span class="secnum">19.3.5</span> BigInt64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-biguint64array" title="BigUint64Array ( . . . )"><span class="secnum">19.3.6</span> BigUint64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-boolean" title="Boolean ( . . . )"><span class="secnum">19.3.7</span> Boolean ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-dataview" title="DataView ( . . . )"><span class="secnum">19.3.8</span> DataView ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-date" title="Date ( . . . )"><span class="secnum">19.3.9</span> Date ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-error" title="Error ( . . . )"><span class="secnum">19.3.10</span> Error ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-evalerror" title="EvalError ( . . . )"><span class="secnum">19.3.11</span> EvalError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-finalization-registry" title="FinalizationRegistry ( . . . )"><span class="secnum">19.3.12</span> FinalizationRegistry ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float16array" title="Float16Array ( . . . )"><span class="secnum">19.3.13</span> Float16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float32array" title="Float32Array ( . . . )"><span class="secnum">19.3.14</span> Float32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-float64array" title="Float64Array ( . . . )"><span class="secnum">19.3.15</span> Float64Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-function" title="Function ( . . . )"><span class="secnum">19.3.16</span> Function ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int8array" title="Int8Array ( . . . )"><span class="secnum">19.3.17</span> Int8Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int16array" title="Int16Array ( . . . )"><span class="secnum">19.3.18</span> Int16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-int32array" title="Int32Array ( . . . )"><span class="secnum">19.3.19</span> Int32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-iterator" title="Iterator ( . . . )"><span class="secnum">19.3.20</span> Iterator ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-map" title="Map ( . . . )"><span class="secnum">19.3.21</span> Map ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-number" title="Number ( . . . )"><span class="secnum">19.3.22</span> Number ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-object" title="Object ( . . . )"><span class="secnum">19.3.23</span> Object ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-promise" title="Promise ( . . . )"><span class="secnum">19.3.24</span> Promise ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-proxy" title="Proxy ( . . . )"><span class="secnum">19.3.25</span> Proxy ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-rangeerror" title="RangeError ( . . . )"><span class="secnum">19.3.26</span> RangeError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-referenceerror" title="ReferenceError ( . . . )"><span class="secnum">19.3.27</span> ReferenceError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-regexp" title="RegExp ( . . . )"><span class="secnum">19.3.28</span> RegExp ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-set" title="Set ( . . . )"><span class="secnum">19.3.29</span> Set ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-sharedarraybuffer" title="SharedArrayBuffer ( . . . )"><span class="secnum">19.3.30</span> SharedArrayBuffer ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-string" title="String ( . . . )"><span class="secnum">19.3.31</span> String ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-symbol" title="Symbol ( . . . )"><span class="secnum">19.3.32</span> Symbol ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-syntaxerror" title="SyntaxError ( . . . )"><span class="secnum">19.3.33</span> SyntaxError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-typeerror" title="TypeError ( . . . )"><span class="secnum">19.3.34</span> TypeError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-uint8array" title="Uint8Array ( . . . )"><span class="secnum">19.3.35</span> Uint8Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint8clampedarray" title="Uint8ClampedArray ( . . . )"><span class="secnum">19.3.36</span> Uint8ClampedArray ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint16array" title="Uint16Array ( . . . )"><span class="secnum">19.3.37</span> Uint16Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-uint32array" title="Uint32Array ( . . . )"><span class="secnum">19.3.38</span> Uint32Array ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-urierror" title="URIError ( . . . )"><span class="secnum">19.3.39</span> URIError ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakmap" title="WeakMap ( . . . )"><span class="secnum">19.3.40</span> WeakMap ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakref" title="WeakRef ( . . . )"><span class="secnum">19.3.41</span> WeakRef ( . . . )</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-constructor-properties-of-the-global-object-weakset" title="WeakSet ( . . . )"><span class="secnum">19.3.42</span> WeakSet ( . . . )</a></li></ol></li><li><span class="item-toggle">+</span><a href="global-object.html#sec-other-properties-of-the-global-object" title="Other Properties of the Global Object"><span class="secnum">19.4</span> Other Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="global-object.html#sec-atomics" title="Atomics"><span class="secnum">19.4.1</span> Atomics</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-json" title="JSON"><span class="secnum">19.4.2</span> JSON</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-math" title="Math"><span class="secnum">19.4.3</span> Math</a></li><li><span class="item-toggle-none"></span><a href="global-object.html#sec-reflect" title="Reflect"><span class="secnum">19.4.4</span> Reflect</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-fundamental-objects" title="Fundamental Objects"><span class="secnum">20</span> Fundamental Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object-objects" title="Object Objects"><span class="secnum">20.1</span> Object Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object-constructor" title="The Object Constructor"><span class="secnum">20.1.1</span> The Object Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object-value" title="Object ( value )"><span class="secnum">20.1.1.1</span> Object ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-object-constructor" title="Properties of the Object Constructor"><span class="secnum">20.1.2</span> Properties of the Object Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.assign" title="Object.assign ( target, ...sources )"><span class="secnum">20.1.2.1</span> Object.assign ( <var>target</var>, ...<var>sources</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.create" title="Object.create ( O, Properties )"><span class="secnum">20.1.2.2</span> Object.create ( <var>O</var>, <var>Properties</var> )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.defineproperties" title="Object.defineProperties ( O, Properties )"><span class="secnum">20.1.2.3</span> Object.defineProperties ( <var>O</var>, <var>Properties</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-objectdefineproperties" title="ObjectDefineProperties ( O, Properties )"><span class="secnum">20.1.2.3.1</span> ObjectDefineProperties ( <var>O</var>, <var>Properties</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.defineproperty" title="Object.defineProperty ( O, P, Attributes )"><span class="secnum">20.1.2.4</span> Object.defineProperty ( <var>O</var>, <var>P</var>, <var>Attributes</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.entries" title="Object.entries ( O )"><span class="secnum">20.1.2.5</span> Object.entries ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.freeze" title="Object.freeze ( O )"><span class="secnum">20.1.2.6</span> Object.freeze ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.fromentries" title="Object.fromEntries ( iterable )"><span class="secnum">20.1.2.7</span> Object.fromEntries ( <var>iterable</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertydescriptor" title="Object.getOwnPropertyDescriptor ( O, P )"><span class="secnum">20.1.2.8</span> Object.getOwnPropertyDescriptor ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertydescriptors" title="Object.getOwnPropertyDescriptors ( O )"><span class="secnum">20.1.2.9</span> Object.getOwnPropertyDescriptors ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getownpropertynames" title="Object.getOwnPropertyNames ( O )"><span class="secnum">20.1.2.10</span> Object.getOwnPropertyNames ( <var>O</var> )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.getownpropertysymbols" title="Object.getOwnPropertySymbols ( O )"><span class="secnum">20.1.2.11</span> Object.getOwnPropertySymbols ( <var>O</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-getownpropertykeys" title="GetOwnPropertyKeys ( O, type )"><span class="secnum">20.1.2.11.1</span> GetOwnPropertyKeys ( <var>O</var>, <var>type</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.getprototypeof" title="Object.getPrototypeOf ( O )"><span class="secnum">20.1.2.12</span> Object.getPrototypeOf ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.groupby" title="Object.groupBy ( items, callback )"><span class="secnum">20.1.2.13</span> Object.groupBy ( <var>items</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.hasown" title="Object.hasOwn ( O, P )"><span class="secnum">20.1.2.14</span> Object.hasOwn ( <var>O</var>, <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.is" title="Object.is ( value1, value2 )"><span class="secnum">20.1.2.15</span> Object.is ( <var>value1</var>, <var>value2</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.isextensible" title="Object.isExtensible ( O )"><span class="secnum">20.1.2.16</span> Object.isExtensible ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.isfrozen" title="Object.isFrozen ( O )"><span class="secnum">20.1.2.17</span> Object.isFrozen ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.issealed" title="Object.isSealed ( O )"><span class="secnum">20.1.2.18</span> Object.isSealed ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.keys" title="Object.keys ( O )"><span class="secnum">20.1.2.19</span> Object.keys ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.preventextensions" title="Object.preventExtensions ( O )"><span class="secnum">20.1.2.20</span> Object.preventExtensions ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype" title="Object.prototype"><span class="secnum">20.1.2.21</span> Object.prototype</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.seal" title="Object.seal ( O )"><span class="secnum">20.1.2.22</span> Object.seal ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.setprototypeof" title="Object.setPrototypeOf ( O, proto )"><span class="secnum">20.1.2.23</span> Object.setPrototypeOf ( <var>O</var>, <var>proto</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.values" title="Object.values ( O )"><span class="secnum">20.1.2.24</span> Object.values ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object" title="Properties of the Object Prototype Object"><span class="secnum">20.1.3</span> Properties of the Object Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.constructor" title="Object.prototype.constructor"><span class="secnum">20.1.3.1</span> Object.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.hasownproperty" title="Object.prototype.hasOwnProperty ( V )"><span class="secnum">20.1.3.2</span> Object.prototype.hasOwnProperty ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.isprototypeof" title="Object.prototype.isPrototypeOf ( V )"><span class="secnum">20.1.3.3</span> Object.prototype.isPrototypeOf ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.propertyisenumerable" title="Object.prototype.propertyIsEnumerable ( V )"><span class="secnum">20.1.3.4</span> Object.prototype.propertyIsEnumerable ( <var>V</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.tolocalestring" title="Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">20.1.3.5</span> Object.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.tostring" title="Object.prototype.toString ( )"><span class="secnum">20.1.3.6</span> Object.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.valueof" title="Object.prototype.valueOf ( )"><span class="secnum">20.1.3.7</span> Object.prototype.valueOf ( )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.prototype.__proto__" title="Object.prototype.__proto__"><span class="secnum">20.1.3.8</span> Object.prototype.__proto__</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-get-object.prototype.__proto__" title="get Object.prototype.__proto__"><span class="secnum">20.1.3.8.1</span> get Object.prototype.__proto__</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-set-object.prototype.__proto__" title="set Object.prototype.__proto__"><span class="secnum">20.1.3.8.2</span> set Object.prototype.__proto__</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-object.prototype-legacy-accessor-methods" title="Legacy Object.prototype Accessor Methods"><span class="secnum">20.1.3.9</span> Legacy Object.prototype Accessor Methods</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__defineGetter__" title="Object.prototype.__defineGetter__ ( P, getter )"><span class="secnum">20.1.3.9.1</span> Object.prototype.__defineGetter__ ( <var>P</var>, <var>getter</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__defineSetter__" title="Object.prototype.__defineSetter__ ( P, setter )"><span class="secnum">20.1.3.9.2</span> Object.prototype.__defineSetter__ ( <var>P</var>, <var>setter</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__lookupGetter__" title="Object.prototype.__lookupGetter__ ( P )"><span class="secnum">20.1.3.9.3</span> Object.prototype.__lookupGetter__ ( <var>P</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-object.prototype.__lookupSetter__" title="Object.prototype.__lookupSetter__ ( P )"><span class="secnum">20.1.3.9.4</span> Object.prototype.__lookupSetter__ ( <var>P</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-object-instances" title="Properties of Object Instances"><span class="secnum">20.1.4</span> Properties of Object Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-objects" title="Function Objects"><span class="secnum">20.2</span> Function Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-constructor" title="The Function Constructor"><span class="secnum">20.2.1</span> The Function Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-p1-p2-pn-body" title="Function ( ...parameterArgs, bodyArg )"><span class="secnum">20.2.1.1</span> Function ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-createdynamicfunction" title="CreateDynamicFunction ( constructor, newTarget, kind, parameterArgs, bodyArg )"><span class="secnum">20.2.1.1.1</span> CreateDynamicFunction ( <var>constructor</var>, <var>newTarget</var>, <var>kind</var>, <var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-function-constructor" title="Properties of the Function Constructor"><span class="secnum">20.2.2</span> Properties of the Function Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype" title="Function.prototype"><span class="secnum">20.2.2.1</span> Function.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object" title="Properties of the Function Prototype Object"><span class="secnum">20.2.3</span> Properties of the Function Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.apply" title="Function.prototype.apply ( thisArg, argArray )"><span class="secnum">20.2.3.1</span> Function.prototype.apply ( <var>thisArg</var>, <var>argArray</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.bind" title="Function.prototype.bind ( thisArg, ...args )"><span class="secnum">20.2.3.2</span> Function.prototype.bind ( <var>thisArg</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.call" title="Function.prototype.call ( thisArg, ...args )"><span class="secnum">20.2.3.3</span> Function.prototype.call ( <var>thisArg</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.constructor" title="Function.prototype.constructor"><span class="secnum">20.2.3.4</span> Function.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype.tostring" title="Function.prototype.toString ( )"><span class="secnum">20.2.3.5</span> Function.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function.prototype-%symbol.hasinstance%" title="Function.prototype [ %Symbol.hasInstance% ] ( V )"><span class="secnum">20.2.3.6</span> Function.prototype [ %Symbol.hasInstance% ] ( <var>V</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-function-instances" title="Function Instances"><span class="secnum">20.2.4</span> Function Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-length" title="length"><span class="secnum">20.2.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-name" title="name"><span class="secnum">20.2.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-function-instances-prototype" title="prototype"><span class="secnum">20.2.4.3</span> prototype</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-hosthassourcetextavailable" title="HostHasSourceTextAvailable ( func )"><span class="secnum">20.2.5</span> HostHasSourceTextAvailable ( <var>func</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean-objects" title="Boolean Objects"><span class="secnum">20.3</span> Boolean Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean-constructor" title="The Boolean Constructor"><span class="secnum">20.3.1</span> The Boolean Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean-constructor-boolean-value" title="Boolean ( value )"><span class="secnum">20.3.1.1</span> Boolean ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-boolean-constructor" title="Properties of the Boolean Constructor"><span class="secnum">20.3.2</span> Properties of the Boolean Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype" title="Boolean.prototype"><span class="secnum">20.3.2.1</span> Boolean.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-boolean-prototype-object" title="Properties of the Boolean Prototype Object"><span class="secnum">20.3.3</span> Properties of the Boolean Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype.constructor" title="Boolean.prototype.constructor"><span class="secnum">20.3.3.1</span> Boolean.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-boolean.prototype.tostring" title="Boolean.prototype.toString ( )"><span class="secnum">20.3.3.2</span> Boolean.prototype.toString ( )</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-boolean.prototype.valueof" title="Boolean.prototype.valueOf ( )"><span class="secnum">20.3.3.3</span> Boolean.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-thisbooleanvalue" title="ThisBooleanValue ( value )"><span class="secnum">20.3.3.3.1</span> ThisBooleanValue ( <var>value</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-boolean-instances" title="Properties of Boolean Instances"><span class="secnum">20.3.4</span> Properties of Boolean Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol-objects" title="Symbol Objects"><span class="secnum">20.4</span> Symbol Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol-constructor" title="The Symbol Constructor"><span class="secnum">20.4.1</span> The Symbol Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol-description" title="Symbol ( [ description ] )"><span class="secnum">20.4.1.1</span> Symbol ( [ <var>description</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-symbol-constructor" title="Properties of the Symbol Constructor"><span class="secnum">20.4.2</span> Properties of the Symbol Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.asynciterator" title="Symbol.asyncIterator"><span class="secnum">20.4.2.1</span> Symbol.asyncIterator</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.for" title="Symbol.for ( key )"><span class="secnum">20.4.2.2</span> Symbol.for ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.hasinstance" title="Symbol.hasInstance"><span class="secnum">20.4.2.3</span> Symbol.hasInstance</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.isconcatspreadable" title="Symbol.isConcatSpreadable"><span class="secnum">20.4.2.4</span> Symbol.isConcatSpreadable</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.iterator" title="Symbol.iterator"><span class="secnum">20.4.2.5</span> Symbol.iterator</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.keyfor" title="Symbol.keyFor ( sym )"><span class="secnum">20.4.2.6</span> Symbol.keyFor ( <var>sym</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.match" title="Symbol.match"><span class="secnum">20.4.2.7</span> Symbol.match</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.matchall" title="Symbol.matchAll"><span class="secnum">20.4.2.8</span> Symbol.matchAll</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype" title="Symbol.prototype"><span class="secnum">20.4.2.9</span> Symbol.prototype</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.replace" title="Symbol.replace"><span class="secnum">20.4.2.10</span> Symbol.replace</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.search" title="Symbol.search"><span class="secnum">20.4.2.11</span> Symbol.search</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.species" title="Symbol.species"><span class="secnum">20.4.2.12</span> Symbol.species</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.split" title="Symbol.split"><span class="secnum">20.4.2.13</span> Symbol.split</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.toprimitive" title="Symbol.toPrimitive"><span class="secnum">20.4.2.14</span> Symbol.toPrimitive</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.tostringtag" title="Symbol.toStringTag"><span class="secnum">20.4.2.15</span> Symbol.toStringTag</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.unscopables" title="Symbol.unscopables"><span class="secnum">20.4.2.16</span> Symbol.unscopables</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-symbol-prototype-object" title="Properties of the Symbol Prototype Object"><span class="secnum">20.4.3</span> Properties of the Symbol Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype.constructor" title="Symbol.prototype.constructor"><span class="secnum">20.4.3.1</span> Symbol.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype.description" title="get Symbol.prototype.description"><span class="secnum">20.4.3.2</span> get Symbol.prototype.description</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol.prototype.tostring" title="Symbol.prototype.toString ( )"><span class="secnum">20.4.3.3</span> Symbol.prototype.toString ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symboldescriptivestring" title="SymbolDescriptiveString ( sym )"><span class="secnum">20.4.3.3.1</span> SymbolDescriptiveString ( <var>sym</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-symbol.prototype.valueof" title="Symbol.prototype.valueOf ( )"><span class="secnum">20.4.3.4</span> Symbol.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-thissymbolvalue" title="ThisSymbolValue ( value )"><span class="secnum">20.4.3.4.1</span> ThisSymbolValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype-%symbol.toprimitive%" title="Symbol.prototype [ %Symbol.toPrimitive% ] ( hint )"><span class="secnum">20.4.3.5</span> Symbol.prototype [ %Symbol.toPrimitive% ] ( <var>hint</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-symbol.prototype-%symbol.tostringtag%" title="Symbol.prototype [ %Symbol.toStringTag% ]"><span class="secnum">20.4.3.6</span> Symbol.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-symbol-instances" title="Properties of Symbol Instances"><span class="secnum">20.4.4</span> Properties of Symbol Instances</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-abstract-operations-for-symbols" title="Abstract Operations for Symbols"><span class="secnum">20.4.5</span> Abstract Operations for Symbols</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-keyforsymbol" title="KeyForSymbol ( sym )"><span class="secnum">20.4.5.1</span> KeyForSymbol ( <var>sym</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-error-objects" title="Error Objects"><span class="secnum">20.5</span> Error Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-error-constructor" title="The Error Constructor"><span class="secnum">20.5.1</span> The Error Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error-message" title="Error ( message [ , options ] )"><span class="secnum">20.5.1.1</span> Error ( <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-error-constructor" title="Properties of the Error Constructor"><span class="secnum">20.5.2</span> Properties of the Error Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.iserror" title="Error.isError ( arg )"><span class="secnum">20.5.2.1</span> Error.isError ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype" title="Error.prototype"><span class="secnum">20.5.2.2</span> Error.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-error-prototype-object" title="Properties of the Error Prototype Object"><span class="secnum">20.5.3</span> Properties of the Error Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.constructor" title="Error.prototype.constructor"><span class="secnum">20.5.3.1</span> Error.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.message" title="Error.prototype.message"><span class="secnum">20.5.3.2</span> Error.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.name" title="Error.prototype.name"><span class="secnum">20.5.3.3</span> Error.prototype.name</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-error.prototype.tostring" title="Error.prototype.toString ( )"><span class="secnum">20.5.3.4</span> Error.prototype.toString ( )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-error-instances" title="Properties of Error Instances"><span class="secnum">20.5.4</span> Properties of Error Instances</a></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard" title="Native Error Types Used in This Standard"><span class="secnum">20.5.5</span> Native Error Types Used in This Standard</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-evalerror" title="EvalError"><span class="secnum">20.5.5.1</span> EvalError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-rangeerror" title="RangeError"><span class="secnum">20.5.5.2</span> RangeError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-referenceerror" title="ReferenceError"><span class="secnum">20.5.5.3</span> ReferenceError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-syntaxerror" title="SyntaxError"><span class="secnum">20.5.5.4</span> SyntaxError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-typeerror" title="TypeError"><span class="secnum">20.5.5.5</span> TypeError</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-native-error-types-used-in-this-standard-urierror" title="URIError"><span class="secnum">20.5.5.6</span> URIError</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-nativeerror-object-structure" title="NativeError Object Structure"><span class="secnum">20.5.6</span> <var>NativeError</var> Object Structure</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-nativeerror-constructors" title="The NativeError Constructors"><span class="secnum">20.5.6.1</span> The <var>NativeError</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror" title="NativeError ( message [ , options ] )"><span class="secnum">20.5.6.1.1</span> <var>NativeError</var> ( <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-nativeerror-constructors" title="Properties of the NativeError Constructors"><span class="secnum">20.5.6.2</span> Properties of the <var>NativeError</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype" title="NativeError.prototype"><span class="secnum">20.5.6.2.1</span> <var>NativeError</var>.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-nativeerror-prototype-objects" title="Properties of the NativeError Prototype Objects"><span class="secnum">20.5.6.3</span> Properties of the <var>NativeError</var> Prototype Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.constructor" title="NativeError.prototype.constructor"><span class="secnum">20.5.6.3.1</span> <var>NativeError</var>.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.message" title="NativeError.prototype.message"><span class="secnum">20.5.6.3.2</span> <var>NativeError</var>.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-nativeerror.prototype.name" title="NativeError.prototype.name"><span class="secnum">20.5.6.3.3</span> <var>NativeError</var>.prototype.name</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-nativeerror-instances" title="Properties of NativeError Instances"><span class="secnum">20.5.6.4</span> Properties of <var>NativeError</var> Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-aggregate-error-objects" title="AggregateError Objects"><span class="secnum">20.5.7</span> AggregateError Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-aggregate-error-constructor" title="The AggregateError Constructor"><span class="secnum">20.5.7.1</span> The AggregateError Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error" title="AggregateError ( errors, message [ , options ] )"><span class="secnum">20.5.7.1.1</span> AggregateError ( <var>errors</var>, <var>message</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-aggregate-error-constructors" title="Properties of the AggregateError Constructor"><span class="secnum">20.5.7.2</span> Properties of the AggregateError Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype" title="AggregateError.prototype"><span class="secnum">20.5.7.2.1</span> AggregateError.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-properties-of-the-aggregate-error-prototype-objects" title="Properties of the AggregateError Prototype Object"><span class="secnum">20.5.7.3</span> Properties of the AggregateError Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.constructor" title="AggregateError.prototype.constructor"><span class="secnum">20.5.7.3.1</span> AggregateError.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.message" title="AggregateError.prototype.message"><span class="secnum">20.5.7.3.2</span> AggregateError.prototype.message</a></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-aggregate-error.prototype.name" title="AggregateError.prototype.name"><span class="secnum">20.5.7.3.3</span> AggregateError.prototype.name</a></li></ol></li><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-properties-of-aggregate-error-instances" title="Properties of AggregateError Instances"><span class="secnum">20.5.7.4</span> Properties of AggregateError Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="fundamental-objects.html#sec-abstract-operations-for-error-objects" title="Abstract Operations for Error Objects"><span class="secnum">20.5.8</span> Abstract Operations for Error Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="fundamental-objects.html#sec-installerrorcause" title="InstallErrorCause ( O, options )"><span class="secnum">20.5.8.1</span> InstallErrorCause ( <var>O</var>, <var>options</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-numbers-and-dates" title="Numbers and Dates"><span class="secnum">21</span> Numbers and Dates</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number-objects" title="Number Objects"><span class="secnum">21.1</span> Number Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number-constructor" title="The Number Constructor"><span class="secnum">21.1.1</span> The Number Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number-constructor-number-value" title="Number ( value )"><span class="secnum">21.1.1.1</span> Number ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-number-constructor" title="Properties of the Number Constructor"><span class="secnum">21.1.2</span> Properties of the Number Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.epsilon" title="Number.EPSILON"><span class="secnum">21.1.2.1</span> Number.EPSILON</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isfinite" title="Number.isFinite ( number )"><span class="secnum">21.1.2.2</span> Number.isFinite ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isinteger" title="Number.isInteger ( number )"><span class="secnum">21.1.2.3</span> Number.isInteger ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.isnan" title="Number.isNaN ( number )"><span class="secnum">21.1.2.4</span> Number.isNaN ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.issafeinteger" title="Number.isSafeInteger ( number )"><span class="secnum">21.1.2.5</span> Number.isSafeInteger ( <var>number</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.max_safe_integer" title="Number.MAX_SAFE_INTEGER"><span class="secnum">21.1.2.6</span> Number.MAX_SAFE_INTEGER</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.max_value" title="Number.MAX_VALUE"><span class="secnum">21.1.2.7</span> Number.MAX_VALUE</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.min_safe_integer" title="Number.MIN_SAFE_INTEGER"><span class="secnum">21.1.2.8</span> Number.MIN_SAFE_INTEGER</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.min_value" title="Number.MIN_VALUE"><span class="secnum">21.1.2.9</span> Number.MIN_VALUE</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.nan" title="Number.NaN"><span class="secnum">21.1.2.10</span> Number.NaN</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.negative_infinity" title="Number.NEGATIVE_INFINITY"><span class="secnum">21.1.2.11</span> Number.NEGATIVE_INFINITY</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.parsefloat" title="Number.parseFloat ( string )"><span class="secnum">21.1.2.12</span> Number.parseFloat ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.parseint" title="Number.parseInt ( string, radix )"><span class="secnum">21.1.2.13</span> Number.parseInt ( <var>string</var>, <var>radix</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.positive_infinity" title="Number.POSITIVE_INFINITY"><span class="secnum">21.1.2.14</span> Number.POSITIVE_INFINITY</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype" title="Number.prototype"><span class="secnum">21.1.2.15</span> Number.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-number-prototype-object" title="Properties of the Number Prototype Object"><span class="secnum">21.1.3</span> Properties of the Number Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.constructor" title="Number.prototype.constructor"><span class="secnum">21.1.3.1</span> Number.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.toexponential" title="Number.prototype.toExponential ( fractionDigits )"><span class="secnum">21.1.3.2</span> Number.prototype.toExponential ( <var>fractionDigits</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tofixed" title="Number.prototype.toFixed ( fractionDigits )"><span class="secnum">21.1.3.3</span> Number.prototype.toFixed ( <var>fractionDigits</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tolocalestring" title="Number.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.1.3.4</span> Number.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.toprecision" title="Number.prototype.toPrecision ( precision )"><span class="secnum">21.1.3.5</span> Number.prototype.toPrecision ( <var>precision</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-number.prototype.tostring" title="Number.prototype.toString ( [ radix ] )"><span class="secnum">21.1.3.6</span> Number.prototype.toString ( [ <var>radix</var> ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-number.prototype.valueof" title="Number.prototype.valueOf ( )"><span class="secnum">21.1.3.7</span> Number.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-thisnumbervalue" title="ThisNumberValue ( value )"><span class="secnum">21.1.3.7.1</span> ThisNumberValue ( <var>value</var> )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-number-instances" title="Properties of Number Instances"><span class="secnum">21.1.4</span> Properties of Number Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-objects" title="BigInt Objects"><span class="secnum">21.2</span> BigInt Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-constructor" title="The BigInt Constructor"><span class="secnum">21.2.1</span> The BigInt Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint-constructor-number-value" title="BigInt ( value )"><span class="secnum">21.2.1.1</span> BigInt ( <var>value</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-numbertobigint" title="NumberToBigInt ( number )"><span class="secnum">21.2.1.1.1</span> NumberToBigInt ( <var>number</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-bigint-constructor" title="Properties of the BigInt Constructor"><span class="secnum">21.2.2</span> Properties of the BigInt Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.asintn" title="BigInt.asIntN ( bits, bigint )"><span class="secnum">21.2.2.1</span> BigInt.asIntN ( <var>bits</var>, <var>bigint</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.asuintn" title="BigInt.asUintN ( bits, bigint )"><span class="secnum">21.2.2.2</span> BigInt.asUintN ( <var>bits</var>, <var>bigint</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype" title="BigInt.prototype"><span class="secnum">21.2.2.3</span> BigInt.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-bigint-prototype-object" title="Properties of the BigInt Prototype Object"><span class="secnum">21.2.3</span> Properties of the BigInt Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.constructor" title="BigInt.prototype.constructor"><span class="secnum">21.2.3.1</span> BigInt.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.tolocalestring" title="BigInt.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.2.3.2</span> BigInt.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype.tostring" title="BigInt.prototype.toString ( [ radix ] )"><span class="secnum">21.2.3.3</span> BigInt.prototype.toString ( [ <var>radix</var> ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-bigint.prototype.valueof" title="BigInt.prototype.valueOf ( )"><span class="secnum">21.2.3.4</span> BigInt.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-thisbigintvalue" title="ThisBigIntValue ( value )"><span class="secnum">21.2.3.4.1</span> ThisBigIntValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-bigint.prototype-%symbol.tostringtag%" title="BigInt.prototype [ %Symbol.toStringTag% ]"><span class="secnum">21.2.3.5</span> BigInt.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-bigint-instances" title="Properties of BigInt Instances"><span class="secnum">21.2.4</span> Properties of BigInt Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-math-object" title="The Math Object"><span class="secnum">21.3</span> The Math Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-value-properties-of-the-math-object" title="Value Properties of the Math Object"><span class="secnum">21.3.1</span> Value Properties of the Math Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.e" title="Math.E"><span class="secnum">21.3.1.1</span> Math.E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ln10" title="Math.LN10"><span class="secnum">21.3.1.2</span> Math.LN10</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ln2" title="Math.LN2"><span class="secnum">21.3.1.3</span> Math.LN2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log10e" title="Math.LOG10E"><span class="secnum">21.3.1.4</span> Math.LOG10E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log2e" title="Math.LOG2E"><span class="secnum">21.3.1.5</span> Math.LOG2E</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.pi" title="Math.PI"><span class="secnum">21.3.1.6</span> Math.PI</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt1_2" title="Math.SQRT1_2"><span class="secnum">21.3.1.7</span> Math.SQRT1_2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt2" title="Math.SQRT2"><span class="secnum">21.3.1.8</span> Math.SQRT2</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math-%symbol.tostringtag%" title="Math [ %Symbol.toStringTag% ]"><span class="secnum">21.3.1.9</span> Math [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-function-properties-of-the-math-object" title="Function Properties of the Math Object"><span class="secnum">21.3.2</span> Function Properties of the Math Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.abs" title="Math.abs ( x )"><span class="secnum">21.3.2.1</span> Math.abs ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.acos" title="Math.acos ( x )"><span class="secnum">21.3.2.2</span> Math.acos ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.acosh" title="Math.acosh ( x )"><span class="secnum">21.3.2.3</span> Math.acosh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.asin" title="Math.asin ( x )"><span class="secnum">21.3.2.4</span> Math.asin ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.asinh" title="Math.asinh ( x )"><span class="secnum">21.3.2.5</span> Math.asinh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atan" title="Math.atan ( x )"><span class="secnum">21.3.2.6</span> Math.atan ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atanh" title="Math.atanh ( x )"><span class="secnum">21.3.2.7</span> Math.atanh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.atan2" title="Math.atan2 ( y, x )"><span class="secnum">21.3.2.8</span> Math.atan2 ( <var>y</var>, <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cbrt" title="Math.cbrt ( x )"><span class="secnum">21.3.2.9</span> Math.cbrt ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.ceil" title="Math.ceil ( x )"><span class="secnum">21.3.2.10</span> Math.ceil ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.clz32" title="Math.clz32 ( x )"><span class="secnum">21.3.2.11</span> Math.clz32 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cos" title="Math.cos ( x )"><span class="secnum">21.3.2.12</span> Math.cos ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.cosh" title="Math.cosh ( x )"><span class="secnum">21.3.2.13</span> Math.cosh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.exp" title="Math.exp ( x )"><span class="secnum">21.3.2.14</span> Math.exp ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.expm1" title="Math.expm1 ( x )"><span class="secnum">21.3.2.15</span> Math.expm1 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.floor" title="Math.floor ( x )"><span class="secnum">21.3.2.16</span> Math.floor ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.fround" title="Math.fround ( x )"><span class="secnum">21.3.2.17</span> Math.fround ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.f16round" title="Math.f16round ( x )"><span class="secnum">21.3.2.18</span> Math.f16round ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.hypot" title="Math.hypot ( ...args )"><span class="secnum">21.3.2.19</span> Math.hypot ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.imul" title="Math.imul ( x, y )"><span class="secnum">21.3.2.20</span> Math.imul ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log" title="Math.log ( x )"><span class="secnum">21.3.2.21</span> Math.log ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log1p" title="Math.log1p ( x )"><span class="secnum">21.3.2.22</span> Math.log1p ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log10" title="Math.log10 ( x )"><span class="secnum">21.3.2.23</span> Math.log10 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.log2" title="Math.log2 ( x )"><span class="secnum">21.3.2.24</span> Math.log2 ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.max" title="Math.max ( ...args )"><span class="secnum">21.3.2.25</span> Math.max ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.min" title="Math.min ( ...args )"><span class="secnum">21.3.2.26</span> Math.min ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.pow" title="Math.pow ( base, exponent )"><span class="secnum">21.3.2.27</span> Math.pow ( <var>base</var>, <var>exponent</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.random" title="Math.random ( )"><span class="secnum">21.3.2.28</span> Math.random ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.round" title="Math.round ( x )"><span class="secnum">21.3.2.29</span> Math.round ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sign" title="Math.sign ( x )"><span class="secnum">21.3.2.30</span> Math.sign ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sin" title="Math.sin ( x )"><span class="secnum">21.3.2.31</span> Math.sin ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sinh" title="Math.sinh ( x )"><span class="secnum">21.3.2.32</span> Math.sinh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sqrt" title="Math.sqrt ( x )"><span class="secnum">21.3.2.33</span> Math.sqrt ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.sumprecise" title="Math.sumPrecise ( items )"><span class="secnum">21.3.2.34</span> Math.sumPrecise ( <var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.tan" title="Math.tan ( x )"><span class="secnum">21.3.2.35</span> Math.tan ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.tanh" title="Math.tanh ( x )"><span class="secnum">21.3.2.36</span> Math.tanh ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-math.trunc" title="Math.trunc ( x )"><span class="secnum">21.3.2.37</span> Math.trunc ( <var>x</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-objects" title="Date Objects"><span class="secnum">21.4</span> Date Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-overview-of-date-objects-and-definitions-of-abstract-operations" title="Overview of Date Objects and Definitions of Abstract Operations"><span class="secnum">21.4.1</span> Overview of Date Objects and Definitions of Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-values-and-time-range" title="Time Values and Time Range"><span class="secnum">21.4.1.1</span> Time Values and Time Range</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-related-constants" title="Time-related Constants"><span class="secnum">21.4.1.2</span> Time-related Constants</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-day" title="Day ( t )"><span class="secnum">21.4.1.3</span> Day ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timewithinday" title="TimeWithinDay ( t )"><span class="secnum">21.4.1.4</span> TimeWithinDay ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-daysinyear" title="DaysInYear ( y )"><span class="secnum">21.4.1.5</span> DaysInYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-dayfromyear" title="DayFromYear ( y )"><span class="secnum">21.4.1.6</span> DayFromYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timefromyear" title="TimeFromYear ( y )"><span class="secnum">21.4.1.7</span> TimeFromYear ( <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-yearfromtime" title="YearFromTime ( t )"><span class="secnum">21.4.1.8</span> YearFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-daywithinyear" title="DayWithinYear ( t )"><span class="secnum">21.4.1.9</span> DayWithinYear ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-inleapyear" title="InLeapYear ( t )"><span class="secnum">21.4.1.10</span> InLeapYear ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-monthfromtime" title="MonthFromTime ( t )"><span class="secnum">21.4.1.11</span> MonthFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-datefromtime" title="DateFromTime ( t )"><span class="secnum">21.4.1.12</span> DateFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-weekday" title="WeekDay ( t )"><span class="secnum">21.4.1.13</span> WeekDay ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-hourfromtime" title="HourFromTime ( t )"><span class="secnum">21.4.1.14</span> HourFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-minfromtime" title="MinFromTime ( t )"><span class="secnum">21.4.1.15</span> MinFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-secfromtime" title="SecFromTime ( t )"><span class="secnum">21.4.1.16</span> SecFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-msfromtime" title="msFromTime ( t )"><span class="secnum">21.4.1.17</span> msFromTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getutcepochnanoseconds" title="GetUTCEpochNanoseconds ( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )"><span class="secnum">21.4.1.18</span> GetUTCEpochNanoseconds ( <var>year</var>, <var>month</var>, <var>day</var>, <var>hour</var>, <var>minute</var>, <var>second</var>, <var>millisecond</var>, <var>microsecond</var>, <var>nanosecond</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-zone-identifiers" title="Time Zone Identifiers"><span class="secnum">21.4.1.19</span> Time Zone Identifiers</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getnamedtimezoneepochnanoseconds" title="GetNamedTimeZoneEpochNanoseconds ( timeZoneIdentifier, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )"><span class="secnum">21.4.1.20</span> GetNamedTimeZoneEpochNanoseconds ( <var>timeZoneIdentifier</var>, <var>year</var>, <var>month</var>, <var>day</var>, <var>hour</var>, <var>minute</var>, <var>second</var>, <var>millisecond</var>, <var>microsecond</var>, <var>nanosecond</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-getnamedtimezoneoffsetnanoseconds" title="GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds )"><span class="secnum">21.4.1.21</span> GetNamedTimeZoneOffsetNanoseconds ( <var>timeZoneIdentifier</var>, <var>epochNanoseconds</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-time-zone-identifier-record" title="Time Zone Identifier Record"><span class="secnum">21.4.1.22</span> Time Zone Identifier Record</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-availablenamedtimezoneidentifiers" title="AvailableNamedTimeZoneIdentifiers ( )"><span class="secnum">21.4.1.23</span> AvailableNamedTimeZoneIdentifiers ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-systemtimezoneidentifier" title="SystemTimeZoneIdentifier ( )"><span class="secnum">21.4.1.24</span> SystemTimeZoneIdentifier ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-localtime" title="LocalTime ( t )"><span class="secnum">21.4.1.25</span> LocalTime ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-utc-t" title="UTC ( t )"><span class="secnum">21.4.1.26</span> UTC ( <var>t</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-maketime" title="MakeTime ( hour, min, sec, ms )"><span class="secnum">21.4.1.27</span> MakeTime ( <var>hour</var>, <var>min</var>, <var>sec</var>, <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makeday" title="MakeDay ( year, month, date )"><span class="secnum">21.4.1.28</span> MakeDay ( <var>year</var>, <var>month</var>, <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makedate" title="MakeDate ( day, time )"><span class="secnum">21.4.1.29</span> MakeDate ( <var>day</var>, <var>time</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-makefullyear" title="MakeFullYear ( year )"><span class="secnum">21.4.1.30</span> MakeFullYear ( <var>year</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timeclip" title="TimeClip ( time )"><span class="secnum">21.4.1.31</span> TimeClip ( <var>time</var> )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-time-string-format" title="Date Time String Format"><span class="secnum">21.4.1.32</span> Date Time String Format</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-expanded-years" title="Expanded Years"><span class="secnum">21.4.1.32.1</span> Expanded Years</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-time-zone-offset-strings" title="Time Zone Offset String Format"><span class="secnum">21.4.1.33</span> Time Zone Offset String Format</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-istimezoneoffsetstring" title="IsTimeZoneOffsetString ( offsetString )"><span class="secnum">21.4.1.33.1</span> IsTimeZoneOffsetString ( <var>offsetString</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-parsetimezoneoffsetstring" title="ParseTimeZoneOffsetString ( offsetString )"><span class="secnum">21.4.1.33.2</span> ParseTimeZoneOffsetString ( <var>offsetString</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date-constructor" title="The Date Constructor"><span class="secnum">21.4.2</span> The Date Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date" title="Date ( ...values )"><span class="secnum">21.4.2.1</span> Date ( ...<var>values</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-date-constructor" title="Properties of the Date Constructor"><span class="secnum">21.4.3</span> Properties of the Date Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.now" title="Date.now ( )"><span class="secnum">21.4.3.1</span> Date.now ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.parse" title="Date.parse ( string )"><span class="secnum">21.4.3.2</span> Date.parse ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype" title="Date.prototype"><span class="secnum">21.4.3.3</span> Date.prototype</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.utc" title="Date.UTC ( year [ , month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] ] )"><span class="secnum">21.4.3.4</span> Date.UTC ( <var>year</var> [ , <var>month</var> [ , <var>date</var> [ , <var>hours</var> [ , <var>minutes</var> [ , <var>seconds</var> [ , <var>ms</var> ] ] ] ] ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-properties-of-the-date-prototype-object" title="Properties of the Date Prototype Object"><span class="secnum">21.4.4</span> Properties of the Date Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.constructor" title="Date.prototype.constructor"><span class="secnum">21.4.4.1</span> Date.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getdate" title="Date.prototype.getDate ( )"><span class="secnum">21.4.4.2</span> Date.prototype.getDate ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getday" title="Date.prototype.getDay ( )"><span class="secnum">21.4.4.3</span> Date.prototype.getDay ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getfullyear" title="Date.prototype.getFullYear ( )"><span class="secnum">21.4.4.4</span> Date.prototype.getFullYear ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gethours" title="Date.prototype.getHours ( )"><span class="secnum">21.4.4.5</span> Date.prototype.getHours ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getmilliseconds" title="Date.prototype.getMilliseconds ( )"><span class="secnum">21.4.4.6</span> Date.prototype.getMilliseconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getminutes" title="Date.prototype.getMinutes ( )"><span class="secnum">21.4.4.7</span> Date.prototype.getMinutes ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getmonth" title="Date.prototype.getMonth ( )"><span class="secnum">21.4.4.8</span> Date.prototype.getMonth ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getseconds" title="Date.prototype.getSeconds ( )"><span class="secnum">21.4.4.9</span> Date.prototype.getSeconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gettime" title="Date.prototype.getTime ( )"><span class="secnum">21.4.4.10</span> Date.prototype.getTime ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.gettimezoneoffset" title="Date.prototype.getTimezoneOffset ( )"><span class="secnum">21.4.4.11</span> Date.prototype.getTimezoneOffset ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcdate" title="Date.prototype.getUTCDate ( )"><span class="secnum">21.4.4.12</span> Date.prototype.getUTCDate ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcday" title="Date.prototype.getUTCDay ( )"><span class="secnum">21.4.4.13</span> Date.prototype.getUTCDay ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcfullyear" title="Date.prototype.getUTCFullYear ( )"><span class="secnum">21.4.4.14</span> Date.prototype.getUTCFullYear ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutchours" title="Date.prototype.getUTCHours ( )"><span class="secnum">21.4.4.15</span> Date.prototype.getUTCHours ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcmilliseconds" title="Date.prototype.getUTCMilliseconds ( )"><span class="secnum">21.4.4.16</span> Date.prototype.getUTCMilliseconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcminutes" title="Date.prototype.getUTCMinutes ( )"><span class="secnum">21.4.4.17</span> Date.prototype.getUTCMinutes ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcmonth" title="Date.prototype.getUTCMonth ( )"><span class="secnum">21.4.4.18</span> Date.prototype.getUTCMonth ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.getutcseconds" title="Date.prototype.getUTCSeconds ( )"><span class="secnum">21.4.4.19</span> Date.prototype.getUTCSeconds ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setdate" title="Date.prototype.setDate ( date )"><span class="secnum">21.4.4.20</span> Date.prototype.setDate ( <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setfullyear" title="Date.prototype.setFullYear ( year [ , month [ , date ] ] )"><span class="secnum">21.4.4.21</span> Date.prototype.setFullYear ( <var>year</var> [ , <var>month</var> [ , <var>date</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.sethours" title="Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )"><span class="secnum">21.4.4.22</span> Date.prototype.setHours ( <var>hour</var> [ , <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setmilliseconds" title="Date.prototype.setMilliseconds ( ms )"><span class="secnum">21.4.4.23</span> Date.prototype.setMilliseconds ( <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setminutes" title="Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )"><span class="secnum">21.4.4.24</span> Date.prototype.setMinutes ( <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setmonth" title="Date.prototype.setMonth ( month [ , date ] )"><span class="secnum">21.4.4.25</span> Date.prototype.setMonth ( <var>month</var> [ , <var>date</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setseconds" title="Date.prototype.setSeconds ( sec [ , ms ] )"><span class="secnum">21.4.4.26</span> Date.prototype.setSeconds ( <var>sec</var> [ , <var>ms</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.settime" title="Date.prototype.setTime ( time )"><span class="secnum">21.4.4.27</span> Date.prototype.setTime ( <var>time</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcdate" title="Date.prototype.setUTCDate ( date )"><span class="secnum">21.4.4.28</span> Date.prototype.setUTCDate ( <var>date</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcfullyear" title="Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )"><span class="secnum">21.4.4.29</span> Date.prototype.setUTCFullYear ( <var>year</var> [ , <var>month</var> [ , <var>date</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutchours" title="Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )"><span class="secnum">21.4.4.30</span> Date.prototype.setUTCHours ( <var>hour</var> [ , <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcmilliseconds" title="Date.prototype.setUTCMilliseconds ( ms )"><span class="secnum">21.4.4.31</span> Date.prototype.setUTCMilliseconds ( <var>ms</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcminutes" title="Date.prototype.setUTCMinutes ( min [ , sec [ , ms ] ] )"><span class="secnum">21.4.4.32</span> Date.prototype.setUTCMinutes ( <var>min</var> [ , <var>sec</var> [ , <var>ms</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcmonth" title="Date.prototype.setUTCMonth ( month [ , date ] )"><span class="secnum">21.4.4.33</span> Date.prototype.setUTCMonth ( <var>month</var> [ , <var>date</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.setutcseconds" title="Date.prototype.setUTCSeconds ( sec [ , ms ] )"><span class="secnum">21.4.4.34</span> Date.prototype.setUTCSeconds ( <var>sec</var> [ , <var>ms</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.todatestring" title="Date.prototype.toDateString ( )"><span class="secnum">21.4.4.35</span> Date.prototype.toDateString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.toisostring" title="Date.prototype.toISOString ( )"><span class="secnum">21.4.4.36</span> Date.prototype.toISOString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tojson" title="Date.prototype.toJSON ( key )"><span class="secnum">21.4.4.37</span> Date.prototype.toJSON ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocaledatestring" title="Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.38</span> Date.prototype.toLocaleDateString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocalestring" title="Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.39</span> Date.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.tolocaletimestring" title="Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">21.4.4.40</span> Date.prototype.toLocaleTimeString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle">+</span><a href="numbers-and-dates.html#sec-date.prototype.tostring" title="Date.prototype.toString ( )"><span class="secnum">21.4.4.41</span> Date.prototype.toString ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timestring" title="TimeString ( tv )"><span class="secnum">21.4.4.41.1</span> TimeString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-datestring" title="DateString ( tv )"><span class="secnum">21.4.4.41.2</span> DateString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-timezoneestring" title="TimeZoneString ( tv )"><span class="secnum">21.4.4.41.3</span> TimeZoneString ( <var>tv</var> )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-todatestring" title="ToDateString ( tv )"><span class="secnum">21.4.4.41.4</span> ToDateString ( <var>tv</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.totimestring" title="Date.prototype.toTimeString ( )"><span class="secnum">21.4.4.42</span> Date.prototype.toTimeString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.toutcstring" title="Date.prototype.toUTCString ( )"><span class="secnum">21.4.4.43</span> Date.prototype.toUTCString ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype.valueof" title="Date.prototype.valueOf ( )"><span class="secnum">21.4.4.44</span> Date.prototype.valueOf ( )</a></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-date.prototype-%symbol.toprimitive%" title="Date.prototype [ %Symbol.toPrimitive% ] ( hint )"><span class="secnum">21.4.4.45</span> Date.prototype [ %Symbol.toPrimitive% ] ( <var>hint</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="numbers-and-dates.html#sec-properties-of-date-instances" title="Properties of Date Instances"><span class="secnum">21.4.5</span> Properties of Date Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-text-processing" title="Text Processing"><span class="secnum">22</span> Text Processing</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-objects" title="String Objects"><span class="secnum">22.1</span> String Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-constructor" title="The String Constructor"><span class="secnum">22.1.1</span> The String Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string-constructor-string-value" title="String ( value )"><span class="secnum">22.1.1.1</span> String ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-string-constructor" title="Properties of the String Constructor"><span class="secnum">22.1.2</span> Properties of the String Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.fromcharcode" title="String.fromCharCode ( ...codeUnits )"><span class="secnum">22.1.2.1</span> String.fromCharCode ( ...<var>codeUnits</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.fromcodepoint" title="String.fromCodePoint ( ...codePoints )"><span class="secnum">22.1.2.2</span> String.fromCodePoint ( ...<var>codePoints</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype" title="String.prototype"><span class="secnum">22.1.2.3</span> String.prototype</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.raw" title="String.raw ( template, ...substitutions )"><span class="secnum">22.1.2.4</span> String.raw ( <var>template</var>, ...<var>substitutions</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-string-prototype-object" title="Properties of the String Prototype Object"><span class="secnum">22.1.3</span> Properties of the String Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.at" title="String.prototype.at ( index )"><span class="secnum">22.1.3.1</span> String.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.charat" title="String.prototype.charAt ( pos )"><span class="secnum">22.1.3.2</span> String.prototype.charAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.charcodeat" title="String.prototype.charCodeAt ( pos )"><span class="secnum">22.1.3.3</span> String.prototype.charCodeAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.codepointat" title="String.prototype.codePointAt ( pos )"><span class="secnum">22.1.3.4</span> String.prototype.codePointAt ( <var>pos</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.concat" title="String.prototype.concat ( ...args )"><span class="secnum">22.1.3.5</span> String.prototype.concat ( ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.constructor" title="String.prototype.constructor"><span class="secnum">22.1.3.6</span> String.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.endswith" title="String.prototype.endsWith ( searchString [ , endPosition ] )"><span class="secnum">22.1.3.7</span> String.prototype.endsWith ( <var>searchString</var> [ , <var>endPosition</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.includes" title="String.prototype.includes ( searchString [ , position ] )"><span class="secnum">22.1.3.8</span> String.prototype.includes ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.indexof" title="String.prototype.indexOf ( searchString [ , position ] )"><span class="secnum">22.1.3.9</span> String.prototype.indexOf ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.iswellformed" title="String.prototype.isWellFormed ( )"><span class="secnum">22.1.3.10</span> String.prototype.isWellFormed ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.lastindexof" title="String.prototype.lastIndexOf ( searchString [ , position ] )"><span class="secnum">22.1.3.11</span> String.prototype.lastIndexOf ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.localecompare" title="String.prototype.localeCompare ( that [ , reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.12</span> String.prototype.localeCompare ( <var>that</var> [ , <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.match" title="String.prototype.match ( regexp )"><span class="secnum">22.1.3.13</span> String.prototype.match ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.matchall" title="String.prototype.matchAll ( regexp )"><span class="secnum">22.1.3.14</span> String.prototype.matchAll ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.normalize" title="String.prototype.normalize ( [ form ] )"><span class="secnum">22.1.3.15</span> String.prototype.normalize ( [ <var>form</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.padend" title="String.prototype.padEnd ( maxLength [ , fillString ] )"><span class="secnum">22.1.3.16</span> String.prototype.padEnd ( <var>maxLength</var> [ , <var>fillString</var> ] )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.padstart" title="String.prototype.padStart ( maxLength [ , fillString ] )"><span class="secnum">22.1.3.17</span> String.prototype.padStart ( <var>maxLength</var> [ , <var>fillString</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-stringpaddingbuiltinsimpl" title="StringPaddingBuiltinsImpl ( O, maxLength, fillString, placement )"><span class="secnum">22.1.3.17.1</span> StringPaddingBuiltinsImpl ( <var>O</var>, <var>maxLength</var>, <var>fillString</var>, <var>placement</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-stringpad" title="StringPad ( S, maxLength, fillString, placement )"><span class="secnum">22.1.3.17.2</span> StringPad ( <var>S</var>, <var>maxLength</var>, <var>fillString</var>, <var>placement</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-tozeropaddeddecimalstring" title="ToZeroPaddedDecimalString ( n, minLength )"><span class="secnum">22.1.3.17.3</span> ToZeroPaddedDecimalString ( <var>n</var>, <var>minLength</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.repeat" title="String.prototype.repeat ( count )"><span class="secnum">22.1.3.18</span> String.prototype.repeat ( <var>count</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.replace" title="String.prototype.replace ( searchValue, replaceValue )"><span class="secnum">22.1.3.19</span> String.prototype.replace ( <var>searchValue</var>, <var>replaceValue</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getsubstitution" title="GetSubstitution ( matched, str, position, captures, namedCaptures, replacementTemplate )"><span class="secnum">22.1.3.19.1</span> GetSubstitution ( <var>matched</var>, <var>str</var>, <var>position</var>, <var>captures</var>, <var>namedCaptures</var>, <var>replacementTemplate</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.replaceall" title="String.prototype.replaceAll ( searchValue, replaceValue )"><span class="secnum">22.1.3.20</span> String.prototype.replaceAll ( <var>searchValue</var>, <var>replaceValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.search" title="String.prototype.search ( regexp )"><span class="secnum">22.1.3.21</span> String.prototype.search ( <var>regexp</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.slice" title="String.prototype.slice ( start, end )"><span class="secnum">22.1.3.22</span> String.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.split" title="String.prototype.split ( separator, limit )"><span class="secnum">22.1.3.23</span> String.prototype.split ( <var>separator</var>, <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.startswith" title="String.prototype.startsWith ( searchString [ , position ] )"><span class="secnum">22.1.3.24</span> String.prototype.startsWith ( <var>searchString</var> [ , <var>position</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.substring" title="String.prototype.substring ( start, end )"><span class="secnum">22.1.3.25</span> String.prototype.substring ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolocalelowercase" title="String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.26</span> String.prototype.toLocaleLowerCase ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolocaleuppercase" title="String.prototype.toLocaleUpperCase ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">22.1.3.27</span> String.prototype.toLocaleUpperCase ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tolowercase" title="String.prototype.toLowerCase ( )"><span class="secnum">22.1.3.28</span> String.prototype.toLowerCase ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.tostring" title="String.prototype.toString ( )"><span class="secnum">22.1.3.29</span> String.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.touppercase" title="String.prototype.toUpperCase ( )"><span class="secnum">22.1.3.30</span> String.prototype.toUpperCase ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.towellformed" title="String.prototype.toWellFormed ( )"><span class="secnum">22.1.3.31</span> String.prototype.toWellFormed ( )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.trim" title="String.prototype.trim ( )"><span class="secnum">22.1.3.32</span> String.prototype.trim ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-trimstring" title="TrimString ( string, where )"><span class="secnum">22.1.3.32.1</span> TrimString ( <var>string</var>, <var>where</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.trimend" title="String.prototype.trimEnd ( )"><span class="secnum">22.1.3.33</span> String.prototype.trimEnd ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype.trimstart" title="String.prototype.trimStart ( )"><span class="secnum">22.1.3.34</span> String.prototype.trimStart ( )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string.prototype.valueof" title="String.prototype.valueOf ( )"><span class="secnum">22.1.3.35</span> String.prototype.valueOf ( )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-thisstringvalue" title="ThisStringValue ( value )"><span class="secnum">22.1.3.35.1</span> ThisStringValue ( <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-string.prototype-%symbol.iterator%" title="String.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">22.1.3.36</span> String.prototype [ %Symbol.iterator% ] ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-string-instances" title="Properties of String Instances"><span class="secnum">22.1.4</span> Properties of String Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-properties-of-string-instances-length" title="length"><span class="secnum">22.1.4.1</span> length</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-string-iterator-objects" title="String Iterator Objects"><span class="secnum">22.1.5</span> String Iterator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-%stringiteratorprototype%-object" title="The %StringIteratorPrototype% Object"><span class="secnum">22.1.5.1</span> The %StringIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%stringiteratorprototype%.next" title="%StringIteratorPrototype%.next ( )"><span class="secnum">22.1.5.1.1</span> %StringIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%stringiteratorprototype%-%symbol.tostringtag%" title="%StringIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">22.1.5.1.2</span> %StringIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-regular-expression-objects" title="RegExp (Regular Expression) Objects"><span class="secnum">22.2</span> RegExp (Regular Expression) Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-patterns" title="Patterns"><span class="secnum">22.2.1</span> Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-early-errors" title="Static Semantics: Early Errors"><span class="secnum">22.2.1.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-countleftcapturingparenswithin" title="Static Semantics: CountLeftCapturingParensWithin ( node )"><span class="secnum">22.2.1.2</span> SS: CountLeftCapturingParensWithin ( <var>node</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-countleftcapturingparensbefore" title="Static Semantics: CountLeftCapturingParensBefore ( node )"><span class="secnum">22.2.1.3</span> SS: CountLeftCapturingParensBefore ( <var>node</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-mightbothparticipate" title="Static Semantics: MightBothParticipate ( x, y )"><span class="secnum">22.2.1.4</span> SS: MightBothParticipate ( <var>x</var>, <var>y</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-capturing-group-number" title="Static Semantics: CapturingGroupNumber"><span class="secnum">22.2.1.5</span> SS: CapturingGroupNumber</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-is-character-class" title="Static Semantics: IsCharacterClass"><span class="secnum">22.2.1.6</span> SS: IsCharacterClass</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-patterns-static-semantics-character-value" title="Static Semantics: CharacterValue"><span class="secnum">22.2.1.7</span> SS: CharacterValue</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-static-semantics-maycontainstrings" title="Static Semantics: MayContainStrings"><span class="secnum">22.2.1.8</span> SS: MayContainStrings</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-groupspecifiersthatmatch" title="Static Semantics: GroupSpecifiersThatMatch ( thisGroupName )"><span class="secnum">22.2.1.9</span> SS: GroupSpecifiersThatMatch ( <var>thisGroupName</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-static-semantics-capturinggroupname" title="Static Semantics: CapturingGroupName"><span class="secnum">22.2.1.10</span> SS: CapturingGroupName</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpidentifiercodepoints" title="Static Semantics: RegExpIdentifierCodePoints"><span class="secnum">22.2.1.11</span> SS: RegExpIdentifierCodePoints</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpidentifiercodepoint" title="Static Semantics: RegExpIdentifierCodePoint"><span class="secnum">22.2.1.12</span> SS: RegExpIdentifierCodePoint</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-pattern-semantics" title="Pattern Semantics"><span class="secnum">22.2.2</span> Pattern Semantics</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-pattern-notation" title="Notation"><span class="secnum">22.2.2.1</span> Notation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-records" title="RegExp Records"><span class="secnum">22.2.2.1.1</span> RegExp Records</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilepattern" title="Runtime Semantics: CompilePattern"><span class="secnum">22.2.2.2</span> RS: CompilePattern</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compilesubpattern" title="Runtime Semantics: CompileSubpattern"><span class="secnum">22.2.2.3</span> RS: CompileSubpattern</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-repeatmatcher-abstract-operation" title="RepeatMatcher ( m, min, max, greedy, x, c, parenIndex, parenCount )"><span class="secnum">22.2.2.3.1</span> RepeatMatcher ( <var>m</var>, <var>min</var>, <var>max</var>, <var>greedy</var>, <var>x</var>, <var>c</var>, <var>parenIndex</var>, <var>parenCount</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-emptymatcher" title="EmptyMatcher ( )"><span class="secnum">22.2.2.3.2</span> EmptyMatcher ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-matchtwoalternatives" title="MatchTwoAlternatives ( m1, m2 )"><span class="secnum">22.2.2.3.3</span> MatchTwoAlternatives ( <var>m1</var>, <var>m2</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-matchsequence" title="MatchSequence ( m1, m2, direction )"><span class="secnum">22.2.2.3.4</span> MatchSequence ( <var>m1</var>, <var>m2</var>, <var>direction</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compileassertion" title="Runtime Semantics: CompileAssertion"><span class="secnum">22.2.2.4</span> RS: CompileAssertion</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-iswordchar-abstract-operation" title="IsWordChar ( rer, Input, e )"><span class="secnum">22.2.2.4.1</span> IsWordChar ( <var>rer</var>, <var>Input</var>, <var>e</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilequantifier" title="Runtime Semantics: CompileQuantifier"><span class="secnum">22.2.2.5</span> RS: CompileQuantifier</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilequantifierprefix" title="Runtime Semantics: CompileQuantifierPrefix"><span class="secnum">22.2.2.6</span> RS: CompileQuantifierPrefix</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compileatom" title="Runtime Semantics: CompileAtom"><span class="secnum">22.2.2.7</span> RS: CompileAtom</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-charactersetmatcher-abstract-operation" title="CharacterSetMatcher ( rer, A, invert, direction )"><span class="secnum">22.2.2.7.1</span> CharacterSetMatcher ( <var>rer</var>, <var>A</var>, <var>invert</var>, <var>direction</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-backreference-matcher" title="BackreferenceMatcher ( rer, ns, direction )"><span class="secnum">22.2.2.7.2</span> BackreferenceMatcher ( <var>rer</var>, <var>ns</var>, <var>direction</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-canonicalize-ch" title="Canonicalize ( rer, ch )"><span class="secnum">22.2.2.7.3</span> Canonicalize ( <var>rer</var>, <var>ch</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-updatemodifiers" title="UpdateModifiers ( rer, add, remove )"><span class="secnum">22.2.2.7.4</span> UpdateModifiers ( <var>rer</var>, <var>add</var>, <var>remove</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compilecharacterclass" title="Runtime Semantics: CompileCharacterClass"><span class="secnum">22.2.2.8</span> RS: CompileCharacterClass</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-compiletocharset" title="Runtime Semantics: CompileToCharSet"><span class="secnum">22.2.2.9</span> RS: CompileToCharSet</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-characterrange-abstract-operation" title="CharacterRange ( A, B )"><span class="secnum">22.2.2.9.1</span> CharacterRange ( <var>A</var>, <var>B</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-haseitherunicodeflag-abstract-operation" title="HasEitherUnicodeFlag ( rer )"><span class="secnum">22.2.2.9.2</span> HasEitherUnicodeFlag ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-wordcharacters" title="WordCharacters ( rer )"><span class="secnum">22.2.2.9.3</span> WordCharacters ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-allcharacters" title="AllCharacters ( rer )"><span class="secnum">22.2.2.9.4</span> AllCharacters ( <var>rer</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-maybesimplecasefolding" title="MaybeSimpleCaseFolding ( rer, A )"><span class="secnum">22.2.2.9.5</span> MaybeSimpleCaseFolding ( <var>rer</var>, <var>A</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-charactercomplement" title="CharacterComplement ( rer, S )"><span class="secnum">22.2.2.9.6</span> CharacterComplement ( <var>rer</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-unicodematchproperty-p" title="UnicodeMatchProperty ( rer, p )"><span class="secnum">22.2.2.9.7</span> UnicodeMatchProperty ( <var>rer</var>, <var>p</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-runtime-semantics-unicodematchpropertyvalue-p-v" title="UnicodeMatchPropertyValue ( p, v )"><span class="secnum">22.2.2.9.8</span> UnicodeMatchPropertyValue ( <var>p</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-compileclasssetstring" title="Runtime Semantics: CompileClassSetString"><span class="secnum">22.2.2.10</span> RS: CompileClassSetString</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-abstract-operations-for-regexp-creation" title="Abstract Operations for RegExp Creation"><span class="secnum">22.2.3</span> Abstract Operations for RegExp Creation</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpcreate" title="RegExpCreate ( P, F )"><span class="secnum">22.2.3.1</span> RegExpCreate ( <var>P</var>, <var>F</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpalloc" title="RegExpAlloc ( newTarget )"><span class="secnum">22.2.3.2</span> RegExpAlloc ( <var>newTarget</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpinitialize" title="RegExpInitialize ( obj, pattern, flags )"><span class="secnum">22.2.3.3</span> RegExpInitialize ( <var>obj</var>, <var>pattern</var>, <var>flags</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-parsepattern" title="Static Semantics: ParsePattern ( patternText, u, v )"><span class="secnum">22.2.3.4</span> SS: ParsePattern ( <var>patternText</var>, <var>u</var>, <var>v</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-constructor" title="The RegExp Constructor"><span class="secnum">22.2.4</span> The RegExp Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-pattern-flags" title="RegExp ( pattern, flags )"><span class="secnum">22.2.4.1</span> RegExp ( <var>pattern</var>, <var>flags</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-regexp-constructor" title="Properties of the RegExp Constructor"><span class="secnum">22.2.5</span> Properties of the RegExp Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp.escape" title="RegExp.escape ( S )"><span class="secnum">22.2.5.1</span> RegExp.escape ( <var>S</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-encodeforregexpescape" title="EncodeForRegExpEscape ( cp )"><span class="secnum">22.2.5.1.1</span> EncodeForRegExpEscape ( <var>cp</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype" title="RegExp.prototype"><span class="secnum">22.2.5.2</span> RegExp.prototype</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp-%symbol.species%" title="get RegExp [ %Symbol.species% ]"><span class="secnum">22.2.5.3</span> get RegExp [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-the-regexp-prototype-object" title="Properties of the RegExp Prototype Object"><span class="secnum">22.2.6</span> Properties of the RegExp Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.constructor" title="RegExp.prototype.constructor"><span class="secnum">22.2.6.1</span> RegExp.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.exec" title="RegExp.prototype.exec ( string )"><span class="secnum">22.2.6.2</span> RegExp.prototype.exec ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.dotAll" title="get RegExp.prototype.dotAll"><span class="secnum">22.2.6.3</span> get RegExp.prototype.dotAll</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-get-regexp.prototype.flags" title="get RegExp.prototype.flags"><span class="secnum">22.2.6.4</span> get RegExp.prototype.flags</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexphasflag" title="RegExpHasFlag ( R, codeUnit )"><span class="secnum">22.2.6.4.1</span> RegExpHasFlag ( <var>R</var>, <var>codeUnit</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.global" title="get RegExp.prototype.global"><span class="secnum">22.2.6.5</span> get RegExp.prototype.global</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.hasIndices" title="get RegExp.prototype.hasIndices"><span class="secnum">22.2.6.6</span> get RegExp.prototype.hasIndices</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.ignorecase" title="get RegExp.prototype.ignoreCase"><span class="secnum">22.2.6.7</span> get RegExp.prototype.ignoreCase</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.match%" title="RegExp.prototype [ %Symbol.match% ] ( string )"><span class="secnum">22.2.6.8</span> RegExp.prototype [ %Symbol.match% ] ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp-prototype-%symbol.matchall%" title="RegExp.prototype [ %Symbol.matchAll% ] ( string )"><span class="secnum">22.2.6.9</span> RegExp.prototype [ %Symbol.matchAll% ] ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.multiline" title="get RegExp.prototype.multiline"><span class="secnum">22.2.6.10</span> get RegExp.prototype.multiline</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.replace%" title="RegExp.prototype [ %Symbol.replace% ] ( string, replaceValue )"><span class="secnum">22.2.6.11</span> RegExp.prototype [ %Symbol.replace% ] ( <var>string</var>, <var>replaceValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.search%" title="RegExp.prototype [ %Symbol.search% ] ( string )"><span class="secnum">22.2.6.12</span> RegExp.prototype [ %Symbol.search% ] ( <var>string</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-get-regexp.prototype.source" title="get RegExp.prototype.source"><span class="secnum">22.2.6.13</span> get RegExp.prototype.source</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-escaperegexppattern" title="EscapeRegExpPattern ( P, F )"><span class="secnum">22.2.6.13.1</span> EscapeRegExpPattern ( <var>P</var>, <var>F</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype-%symbol.split%" title="RegExp.prototype [ %Symbol.split% ] ( string, limit )"><span class="secnum">22.2.6.14</span> RegExp.prototype [ %Symbol.split% ] ( <var>string</var>, <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.sticky" title="get RegExp.prototype.sticky"><span class="secnum">22.2.6.15</span> get RegExp.prototype.sticky</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.test" title="RegExp.prototype.test ( S )"><span class="secnum">22.2.6.16</span> RegExp.prototype.test ( <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexp.prototype.tostring" title="RegExp.prototype.toString ( )"><span class="secnum">22.2.6.17</span> RegExp.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.unicode" title="get RegExp.prototype.unicode"><span class="secnum">22.2.6.18</span> get RegExp.prototype.unicode</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-get-regexp.prototype.unicodesets" title="get RegExp.prototype.unicodeSets"><span class="secnum">22.2.6.19</span> get RegExp.prototype.unicodeSets</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-abstract-operations-for-regexp-matching" title="Abstract Operations for RegExp Matching"><span class="secnum">22.2.7</span> Abstract Operations for RegExp Matching</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpexec" title="RegExpExec ( R, S )"><span class="secnum">22.2.7.1</span> RegExpExec ( <var>R</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-regexpbuiltinexec" title="RegExpBuiltinExec ( R, S )"><span class="secnum">22.2.7.2</span> RegExpBuiltinExec ( <var>R</var>, <var>S</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-advancestringindex" title="AdvanceStringIndex ( S, index, unicode )"><span class="secnum">22.2.7.3</span> AdvanceStringIndex ( <var>S</var>, <var>index</var>, <var>unicode</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getstringindex" title="GetStringIndex ( S, codePointIndex )"><span class="secnum">22.2.7.4</span> GetStringIndex ( <var>S</var>, <var>codePointIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-match-records" title="Match Records"><span class="secnum">22.2.7.5</span> Match Records</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getmatchstring" title="GetMatchString ( S, match )"><span class="secnum">22.2.7.6</span> GetMatchString ( <var>S</var>, <var>match</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-getmatchindexpair" title="GetMatchIndexPair ( S, match )"><span class="secnum">22.2.7.7</span> GetMatchIndexPair ( <var>S</var>, <var>match</var> )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-makematchindicesindexpairarray" title="MakeMatchIndicesIndexPairArray ( S, indices, groupNames, hasGroups )"><span class="secnum">22.2.7.8</span> MakeMatchIndicesIndexPairArray ( <var>S</var>, <var>indices</var>, <var>groupNames</var>, <var>hasGroups</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-properties-of-regexp-instances" title="Properties of RegExp Instances"><span class="secnum">22.2.8</span> Properties of RegExp Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-lastindex" title="lastIndex"><span class="secnum">22.2.8.1</span> lastIndex</a></li></ol></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-regexp-string-iterator-objects" title="RegExp String Iterator Objects"><span class="secnum">22.2.9</span> RegExp String Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-createregexpstringiterator" title="CreateRegExpStringIterator ( R, S, global, fullUnicode )"><span class="secnum">22.2.9.1</span> CreateRegExpStringIterator ( <var>R</var>, <var>S</var>, <var>global</var>, <var>fullUnicode</var> )</a></li><li><span class="item-toggle">+</span><a href="text-processing.html#sec-%regexpstringiteratorprototype%-object" title="The %RegExpStringIteratorPrototype% Object"><span class="secnum">22.2.9.2</span> The %RegExpStringIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%regexpstringiteratorprototype%.next" title="%RegExpStringIteratorPrototype%.next ( )"><span class="secnum">22.2.9.2.1</span> %RegExpStringIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-%regexpstringiteratorprototype%-%symbol.tostringtag%" title="%RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">22.2.9.2.2</span> %RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="text-processing.html#sec-properties-of-regexp-string-iterator-instances" title="Properties of RegExp String Iterator Instances"><span class="secnum">22.2.9.3</span> Properties of RegExp String Iterator Instances</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-indexed-collections" title="Indexed Collections"><span class="secnum">23</span> Indexed Collections</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-objects" title="Array Objects"><span class="secnum">23.1</span> Array Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-constructor" title="The Array Constructor"><span class="secnum">23.1.1</span> The Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array" title="Array ( ...values )"><span class="secnum">23.1.1.1</span> Array ( ...<var>values</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-array-constructor" title="Properties of the Array Constructor"><span class="secnum">23.1.2</span> Properties of the Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.from" title="Array.from ( items [ , mapper [ , thisArg ] ] )"><span class="secnum">23.1.2.1</span> Array.from ( <var>items</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.fromasync" title="Array.fromAsync ( items [ , mapper [ , thisArg ] ] )"><span class="secnum">23.1.2.2</span> Array.fromAsync ( <var>items</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.isarray" title="Array.isArray ( arg )"><span class="secnum">23.1.2.3</span> Array.isArray ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.of" title="Array.of ( ...items )"><span class="secnum">23.1.2.4</span> Array.of ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype" title="Array.prototype"><span class="secnum">23.1.2.5</span> Array.prototype</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-array-%symbol.species%" title="get Array [ %Symbol.species% ]"><span class="secnum">23.1.2.6</span> get Array [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-array-prototype-object" title="Properties of the Array Prototype Object"><span class="secnum">23.1.3</span> Properties of the Array Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.at" title="Array.prototype.at ( index )"><span class="secnum">23.1.3.1</span> Array.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.concat" title="Array.prototype.concat ( ...items )"><span class="secnum">23.1.3.2</span> Array.prototype.concat ( ...<var>items</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-isconcatspreadable" title="IsConcatSpreadable ( O )"><span class="secnum">23.1.3.2.1</span> IsConcatSpreadable ( <var>O</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.constructor" title="Array.prototype.constructor"><span class="secnum">23.1.3.3</span> Array.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.copywithin" title="Array.prototype.copyWithin ( target, start [ , end ] )"><span class="secnum">23.1.3.4</span> Array.prototype.copyWithin ( <var>target</var>, <var>start</var> [ , <var>end</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.entries" title="Array.prototype.entries ( )"><span class="secnum">23.1.3.5</span> Array.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.every" title="Array.prototype.every ( callback [ , thisArg ] )"><span class="secnum">23.1.3.6</span> Array.prototype.every ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.fill" title="Array.prototype.fill ( value [ , start [ , end ] ] )"><span class="secnum">23.1.3.7</span> Array.prototype.fill ( <var>value</var> [ , <var>start</var> [ , <var>end</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.filter" title="Array.prototype.filter ( callback [ , thisArg ] )"><span class="secnum">23.1.3.8</span> Array.prototype.filter ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.find" title="Array.prototype.find ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.9</span> Array.prototype.find ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.findindex" title="Array.prototype.findIndex ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.10</span> Array.prototype.findIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.findlast" title="Array.prototype.findLast ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.11</span> Array.prototype.findLast ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.findlastindex" title="Array.prototype.findLastIndex ( predicate [ , thisArg ] )"><span class="secnum">23.1.3.12</span> Array.prototype.findLastIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-findviapredicate" title="FindViaPredicate ( O, len, direction, predicate, thisArg )"><span class="secnum">23.1.3.12.1</span> FindViaPredicate ( <var>O</var>, <var>len</var>, <var>direction</var>, <var>predicate</var>, <var>thisArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.flat" title="Array.prototype.flat ( [ depth ] )"><span class="secnum">23.1.3.13</span> Array.prototype.flat ( [ <var>depth</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-flattenintoarray" title="FlattenIntoArray ( target, source, sourceLen, start, depth [ , mapperFunction [ , thisArg ] ] )"><span class="secnum">23.1.3.13.1</span> FlattenIntoArray ( <var>target</var>, <var>source</var>, <var>sourceLen</var>, <var>start</var>, <var>depth</var> [ , <var>mapperFunction</var> [ , <var>thisArg</var> ] ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.flatmap" title="Array.prototype.flatMap ( mapperFunction [ , thisArg ] )"><span class="secnum">23.1.3.14</span> Array.prototype.flatMap ( <var>mapperFunction</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.foreach" title="Array.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">23.1.3.15</span> Array.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.includes" title="Array.prototype.includes ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.16</span> Array.prototype.includes ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.indexof" title="Array.prototype.indexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.17</span> Array.prototype.indexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.join" title="Array.prototype.join ( separator )"><span class="secnum">23.1.3.18</span> Array.prototype.join ( <var>separator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.keys" title="Array.prototype.keys ( )"><span class="secnum">23.1.3.19</span> Array.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.lastindexof" title="Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.1.3.20</span> Array.prototype.lastIndexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.map" title="Array.prototype.map ( callback [ , thisArg ] )"><span class="secnum">23.1.3.21</span> Array.prototype.map ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.pop" title="Array.prototype.pop ( )"><span class="secnum">23.1.3.22</span> Array.prototype.pop ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.push" title="Array.prototype.push ( ...items )"><span class="secnum">23.1.3.23</span> Array.prototype.push ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reduce" title="Array.prototype.reduce ( callback [ , initialValue ] )"><span class="secnum">23.1.3.24</span> Array.prototype.reduce ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reduceright" title="Array.prototype.reduceRight ( callback [ , initialValue ] )"><span class="secnum">23.1.3.25</span> Array.prototype.reduceRight ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.reverse" title="Array.prototype.reverse ( )"><span class="secnum">23.1.3.26</span> Array.prototype.reverse ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.shift" title="Array.prototype.shift ( )"><span class="secnum">23.1.3.27</span> Array.prototype.shift ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.slice" title="Array.prototype.slice ( start, end )"><span class="secnum">23.1.3.28</span> Array.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.some" title="Array.prototype.some ( callback [ , thisArg ] )"><span class="secnum">23.1.3.29</span> Array.prototype.some ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array.prototype.sort" title="Array.prototype.sort ( comparator )"><span class="secnum">23.1.3.30</span> Array.prototype.sort ( <var>comparator</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-sortindexedproperties" title="SortIndexedProperties ( obj, len, SortCompare, holes )"><span class="secnum">23.1.3.30.1</span> SortIndexedProperties ( <var>obj</var>, <var>len</var>, <var>SortCompare</var>, <var>holes</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-comparearrayelements" title="CompareArrayElements ( x, y, comparator )"><span class="secnum">23.1.3.30.2</span> CompareArrayElements ( <var>x</var>, <var>y</var>, <var>comparator</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.splice" title="Array.prototype.splice ( start, deleteCount, ...items )"><span class="secnum">23.1.3.31</span> Array.prototype.splice ( <var>start</var>, <var>deleteCount</var>, ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tolocalestring" title="Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">23.1.3.32</span> Array.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.toreversed" title="Array.prototype.toReversed ( )"><span class="secnum">23.1.3.33</span> Array.prototype.toReversed ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tosorted" title="Array.prototype.toSorted ( comparator )"><span class="secnum">23.1.3.34</span> Array.prototype.toSorted ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tospliced" title="Array.prototype.toSpliced ( start, skipCount, ...items )"><span class="secnum">23.1.3.35</span> Array.prototype.toSpliced ( <var>start</var>, <var>skipCount</var>, ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.tostring" title="Array.prototype.toString ( )"><span class="secnum">23.1.3.36</span> Array.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.unshift" title="Array.prototype.unshift ( ...items )"><span class="secnum">23.1.3.37</span> Array.prototype.unshift ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.values" title="Array.prototype.values ( )"><span class="secnum">23.1.3.38</span> Array.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype.with" title="Array.prototype.with ( index, value )"><span class="secnum">23.1.3.39</span> Array.prototype.with ( <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype-%symbol.iterator%" title="Array.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">23.1.3.40</span> Array.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-array.prototype-%symbol.unscopables%" title="Array.prototype [ %Symbol.unscopables% ]"><span class="secnum">23.1.3.41</span> Array.prototype [ %Symbol.unscopables% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-array-instances" title="Properties of Array Instances"><span class="secnum">23.1.4</span> Properties of Array Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-array-instances-length" title="length"><span class="secnum">23.1.4.1</span> length</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-array-iterator-objects" title="Array Iterator Objects"><span class="secnum">23.1.5</span> Array Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-createarrayiterator" title="CreateArrayIterator ( array, kind )"><span class="secnum">23.1.5.1</span> CreateArrayIterator ( <var>array</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%arrayiteratorprototype%-object" title="The %ArrayIteratorPrototype% Object"><span class="secnum">23.1.5.2</span> The %ArrayIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%arrayiteratorprototype%.next" title="%ArrayIteratorPrototype%.next ( )"><span class="secnum">23.1.5.2.1</span> %ArrayIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%arrayiteratorprototype%-%symbol.tostringtag%" title="%ArrayIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">23.1.5.2.2</span> %ArrayIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-array-iterator-instances" title="Properties of Array Iterator Instances"><span class="secnum">23.1.5.3</span> Properties of Array Iterator Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray-objects" title="TypedArray Objects"><span class="secnum">23.2</span> TypedArray Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%typedarray%-intrinsic-object" title="The %TypedArray% Intrinsic Object"><span class="secnum">23.2.1</span> The %TypedArray% Intrinsic Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%" title="%TypedArray% ( )"><span class="secnum">23.2.1.1</span> %TypedArray% ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-%typedarray%-intrinsic-object" title="Properties of the %TypedArray% Intrinsic Object"><span class="secnum">23.2.2</span> Properties of the %TypedArray% Intrinsic Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.from" title="%TypedArray%.from ( source [ , mapper [ , thisArg ] ] )"><span class="secnum">23.2.2.1</span> %TypedArray%.from ( <var>source</var> [ , <var>mapper</var> [ , <var>thisArg</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.of" title="%TypedArray%.of ( ...items )"><span class="secnum">23.2.2.2</span> %TypedArray%.of ( ...<var>items</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype" title="%TypedArray%.prototype"><span class="secnum">23.2.2.3</span> %TypedArray%.prototype</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%-%symbol.species%" title="get %TypedArray% [ %Symbol.species% ]"><span class="secnum">23.2.2.4</span> get %TypedArray% [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-%typedarrayprototype%-object" title="Properties of the %TypedArray% Prototype Object"><span class="secnum">23.2.3</span> Properties of the %TypedArray% Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.at" title="%TypedArray%.prototype.at ( index )"><span class="secnum">23.2.3.1</span> %TypedArray%.prototype.at ( <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.buffer" title="get %TypedArray%.prototype.buffer"><span class="secnum">23.2.3.2</span> get %TypedArray%.prototype.buffer</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.bytelength" title="get %TypedArray%.prototype.byteLength"><span class="secnum">23.2.3.3</span> get %TypedArray%.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.byteoffset" title="get %TypedArray%.prototype.byteOffset"><span class="secnum">23.2.3.4</span> get %TypedArray%.prototype.byteOffset</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.constructor" title="%TypedArray%.prototype.constructor"><span class="secnum">23.2.3.5</span> %TypedArray%.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.copywithin" title="%TypedArray%.prototype.copyWithin ( target, start [ , end ] )"><span class="secnum">23.2.3.6</span> %TypedArray%.prototype.copyWithin ( <var>target</var>, <var>start</var> [ , <var>end</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.entries" title="%TypedArray%.prototype.entries ( )"><span class="secnum">23.2.3.7</span> %TypedArray%.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.every" title="%TypedArray%.prototype.every ( callback [ , thisArg ] )"><span class="secnum">23.2.3.8</span> %TypedArray%.prototype.every ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.fill" title="%TypedArray%.prototype.fill ( value [ , start [ , end ] ] )"><span class="secnum">23.2.3.9</span> %TypedArray%.prototype.fill ( <var>value</var> [ , <var>start</var> [ , <var>end</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.filter" title="%TypedArray%.prototype.filter ( callback [ , thisArg ] )"><span class="secnum">23.2.3.10</span> %TypedArray%.prototype.filter ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.find" title="%TypedArray%.prototype.find ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.11</span> %TypedArray%.prototype.find ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findindex" title="%TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.12</span> %TypedArray%.prototype.findIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findlast" title="%TypedArray%.prototype.findLast ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.13</span> %TypedArray%.prototype.findLast ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.findlastindex" title="%TypedArray%.prototype.findLastIndex ( predicate [ , thisArg ] )"><span class="secnum">23.2.3.14</span> %TypedArray%.prototype.findLastIndex ( <var>predicate</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.foreach" title="%TypedArray%.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">23.2.3.15</span> %TypedArray%.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.includes" title="%TypedArray%.prototype.includes ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.16</span> %TypedArray%.prototype.includes ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.indexof" title="%TypedArray%.prototype.indexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.17</span> %TypedArray%.prototype.indexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.join" title="%TypedArray%.prototype.join ( separator )"><span class="secnum">23.2.3.18</span> %TypedArray%.prototype.join ( <var>separator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.keys" title="%TypedArray%.prototype.keys ( )"><span class="secnum">23.2.3.19</span> %TypedArray%.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.lastindexof" title="%TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )"><span class="secnum">23.2.3.20</span> %TypedArray%.prototype.lastIndexOf ( <var>searchElement</var> [ , <var>fromIndex</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype.length" title="get %TypedArray%.prototype.length"><span class="secnum">23.2.3.21</span> get %TypedArray%.prototype.length</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.map" title="%TypedArray%.prototype.map ( callback [ , thisArg ] )"><span class="secnum">23.2.3.22</span> %TypedArray%.prototype.map ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reduce" title="%TypedArray%.prototype.reduce ( callback [ , initialValue ] )"><span class="secnum">23.2.3.23</span> %TypedArray%.prototype.reduce ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reduceright" title="%TypedArray%.prototype.reduceRight ( callback [ , initialValue ] )"><span class="secnum">23.2.3.24</span> %TypedArray%.prototype.reduceRight ( <var>callback</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.reverse" title="%TypedArray%.prototype.reverse ( )"><span class="secnum">23.2.3.25</span> %TypedArray%.prototype.reverse ( )</a></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-%typedarray%.prototype.set" title="%TypedArray%.prototype.set ( source [ , offset ] )"><span class="secnum">23.2.3.26</span> %TypedArray%.prototype.set ( <var>source</var> [ , <var>offset</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-settypedarrayfromarraylike" title="SetTypedArrayFromArrayLike ( target, targetOffset, source )"><span class="secnum">23.2.3.26.1</span> SetTypedArrayFromArrayLike ( <var>target</var>, <var>targetOffset</var>, <var>source</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-settypedarrayfromtypedarray" title="SetTypedArrayFromTypedArray ( target, targetOffset, source )"><span class="secnum">23.2.3.26.2</span> SetTypedArrayFromTypedArray ( <var>target</var>, <var>targetOffset</var>, <var>source</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.slice" title="%TypedArray%.prototype.slice ( start, end )"><span class="secnum">23.2.3.27</span> %TypedArray%.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.some" title="%TypedArray%.prototype.some ( callback [ , thisArg ] )"><span class="secnum">23.2.3.28</span> %TypedArray%.prototype.some ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.sort" title="%TypedArray%.prototype.sort ( comparator )"><span class="secnum">23.2.3.29</span> %TypedArray%.prototype.sort ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.subarray" title="%TypedArray%.prototype.subarray ( start, end )"><span class="secnum">23.2.3.30</span> %TypedArray%.prototype.subarray ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tolocalestring" title="%TypedArray%.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )"><span class="secnum">23.2.3.31</span> %TypedArray%.prototype.toLocaleString ( [ <var>reserved1</var> [ , <var>reserved2</var> ] ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.toreversed" title="%TypedArray%.prototype.toReversed ( )"><span class="secnum">23.2.3.32</span> %TypedArray%.prototype.toReversed ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tosorted" title="%TypedArray%.prototype.toSorted ( comparator )"><span class="secnum">23.2.3.33</span> %TypedArray%.prototype.toSorted ( <var>comparator</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.tostring" title="%TypedArray%.prototype.toString ( )"><span class="secnum">23.2.3.34</span> %TypedArray%.prototype.toString ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.values" title="%TypedArray%.prototype.values ( )"><span class="secnum">23.2.3.35</span> %TypedArray%.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype.with" title="%TypedArray%.prototype.with ( index, value )"><span class="secnum">23.2.3.36</span> %TypedArray%.prototype.with ( <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-%typedarray%.prototype-%symbol.iterator%" title="%TypedArray%.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">23.2.3.37</span> %TypedArray%.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-get-%typedarray%.prototype-%symbol.tostringtag%" title="get %TypedArray%.prototype [ %Symbol.toStringTag% ]"><span class="secnum">23.2.3.38</span> get %TypedArray%.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-abstract-operations-for-typedarray-objects" title="Abstract Operations for TypedArray Objects"><span class="secnum">23.2.4</span> Abstract Operations for TypedArray Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarraycreatefromconstructor" title="TypedArrayCreateFromConstructor ( constructor, argumentList )"><span class="secnum">23.2.4.1</span> TypedArrayCreateFromConstructor ( <var>constructor</var>, <var>argumentList</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray-create-same-type" title="TypedArrayCreateSameType ( exemplar, length )"><span class="secnum">23.2.4.2</span> TypedArrayCreateSameType ( <var>exemplar</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#typedarray-species-create" title="TypedArraySpeciesCreate ( exemplar, argumentList )"><span class="secnum">23.2.4.3</span> TypedArraySpeciesCreate ( <var>exemplar</var>, <var>argumentList</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-validatetypedarray" title="ValidateTypedArray ( O, order )"><span class="secnum">23.2.4.4</span> ValidateTypedArray ( <var>O</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarrayelementsize" title="TypedArrayElementSize ( O )"><span class="secnum">23.2.4.5</span> TypedArrayElementSize ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarrayelementtype" title="TypedArrayElementType ( O )"><span class="secnum">23.2.4.6</span> TypedArrayElementType ( <var>O</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-comparetypedarrayelements" title="CompareTypedArrayElements ( x, y, comparator )"><span class="secnum">23.2.4.7</span> CompareTypedArrayElements ( <var>x</var>, <var>y</var>, <var>comparator</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray-constructors" title="The TypedArray Constructors"><span class="secnum">23.2.5</span> The <var>TypedArray</var> Constructors</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-typedarray" title="TypedArray ( ...args )"><span class="secnum">23.2.5.1</span> <var>TypedArray</var> ( ...<var>args</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-allocatetypedarray" title="AllocateTypedArray ( constructorName, newTarget, defaultProto [ , length ] )"><span class="secnum">23.2.5.1.1</span> AllocateTypedArray ( <var>constructorName</var>, <var>newTarget</var>, <var>defaultProto</var> [ , <var>length</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromtypedarray" title="InitializeTypedArrayFromTypedArray ( O, srcArray )"><span class="secnum">23.2.5.1.2</span> InitializeTypedArrayFromTypedArray ( <var>O</var>, <var>srcArray</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromarraybuffer" title="InitializeTypedArrayFromArrayBuffer ( O, buffer, byteOffset, length )"><span class="secnum">23.2.5.1.3</span> InitializeTypedArrayFromArrayBuffer ( <var>O</var>, <var>buffer</var>, <var>byteOffset</var>, <var>length</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromlist" title="InitializeTypedArrayFromList ( O, values )"><span class="secnum">23.2.5.1.4</span> InitializeTypedArrayFromList ( <var>O</var>, <var>values</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-initializetypedarrayfromarraylike" title="InitializeTypedArrayFromArrayLike ( O, arrayLike )"><span class="secnum">23.2.5.1.5</span> InitializeTypedArrayFromArrayLike ( <var>O</var>, <var>arrayLike</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-allocatetypedarraybuffer" title="AllocateTypedArrayBuffer ( O, length )"><span class="secnum">23.2.5.1.6</span> AllocateTypedArrayBuffer ( <var>O</var>, <var>length</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-the-typedarray-constructors" title="Properties of the TypedArray Constructors"><span class="secnum">23.2.6</span> Properties of the <var>TypedArray</var> Constructors</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.bytes_per_element" title="TypedArray.BYTES_PER_ELEMENT"><span class="secnum">23.2.6.1</span> <var>TypedArray</var>.BYTES_PER_ELEMENT</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype" title="TypedArray.prototype"><span class="secnum">23.2.6.2</span> <var>TypedArray</var>.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-properties-of-typedarray-prototype-objects" title="Properties of the TypedArray Prototype Objects"><span class="secnum">23.2.7</span> Properties of the <var>TypedArray</var> Prototype Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype.bytes_per_element" title="TypedArray.prototype.BYTES_PER_ELEMENT"><span class="secnum">23.2.7.1</span> <var>TypedArray</var>.prototype.BYTES_PER_ELEMENT</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-typedarray.prototype.constructor" title="TypedArray.prototype.constructor"><span class="secnum">23.2.7.2</span> <var>TypedArray</var>.prototype.constructor</a></li></ol></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-properties-of-typedarray-instances" title="Properties of TypedArray Instances"><span class="secnum">23.2.8</span> Properties of <var>TypedArray</var> Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-uint8array" title="Uint8Array Objects"><span class="secnum">23.3</span> Uint8Array Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-additional-properties-of-the-uint8array-constructor" title="Additional Properties of the Uint8Array Constructor"><span class="secnum">23.3.1</span> Additional Properties of the Uint8Array Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.frombase64" title="Uint8Array.fromBase64 ( string [ , options ] )"><span class="secnum">23.3.1.1</span> Uint8Array.fromBase64 ( <var>string</var> [ , <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.fromhex" title="Uint8Array.fromHex ( string )"><span class="secnum">23.3.1.2</span> Uint8Array.fromHex ( <var>string</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-additional-properties-of-the-uint8array-prototype-object" title="Additional Properties of the Uint8Array Prototype Object"><span class="secnum">23.3.2</span> Additional Properties of the Uint8Array Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.setfrombase64" title="Uint8Array.prototype.setFromBase64 ( string [ , options ] )"><span class="secnum">23.3.2.1</span> Uint8Array.prototype.setFromBase64 ( <var>string</var> [ , <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.setfromhex" title="Uint8Array.prototype.setFromHex ( string )"><span class="secnum">23.3.2.2</span> Uint8Array.prototype.setFromHex ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.tobase64" title="Uint8Array.prototype.toBase64 ( [ options ] )"><span class="secnum">23.3.2.3</span> Uint8Array.prototype.toBase64 ( [ <var>options</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-uint8array.prototype.tohex" title="Uint8Array.prototype.toHex ( )"><span class="secnum">23.3.2.4</span> Uint8Array.prototype.toHex ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="indexed-collections.html#sec-abstract-operations-for-uint8array-objects" title="Abstract Operations for Uint8Array Objects"><span class="secnum">23.3.3</span> Abstract Operations for Uint8Array Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-validateuint8array" title="ValidateUint8Array ( ta )"><span class="secnum">23.3.3.1</span> ValidateUint8Array ( <var>ta</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-getuint8arraybytes" title="GetUint8ArrayBytes ( ta )"><span class="secnum">23.3.3.2</span> GetUint8ArrayBytes ( <var>ta</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-setuint8arraybytes" title="SetUint8ArrayBytes ( into, bytes )"><span class="secnum">23.3.3.3</span> SetUint8ArrayBytes ( <var>into</var>, <var>bytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-skipasciiwhitespace" title="SkipAsciiWhitespace ( string, index )"><span class="secnum">23.3.3.4</span> SkipAsciiWhitespace ( <var>string</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-decodefinalbase64chunk" title="DecodeFinalBase64Chunk ( chunk, throwOnExtraBits )"><span class="secnum">23.3.3.5</span> DecodeFinalBase64Chunk ( <var>chunk</var>, <var>throwOnExtraBits</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-decodefulllengthbase64chunk" title="DecodeFullLengthBase64Chunk ( chunk )"><span class="secnum">23.3.3.6</span> DecodeFullLengthBase64Chunk ( <var>chunk</var> )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-frombase64" title="FromBase64 ( string, alphabet, lastChunkHandling [ , maxLength ] )"><span class="secnum">23.3.3.7</span> FromBase64 ( <var>string</var>, <var>alphabet</var>, <var>lastChunkHandling</var> [ , <var>maxLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="indexed-collections.html#sec-fromhex" title="FromHex ( string [ , maxLength ] )"><span class="secnum">23.3.3.8</span> FromHex ( <var>string</var> [ , <var>maxLength</var> ] )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-keyed-collections" title="Keyed Collections"><span class="secnum">24</span> Keyed Collections</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-objects" title="Map Objects"><span class="secnum">24.1</span> Map Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-constructor" title="The Map Constructor"><span class="secnum">24.1.1</span> The Map Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map-iterable" title="Map ( [ iterable ] )"><span class="secnum">24.1.1.1</span> Map ( [ <var>iterable</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-add-entries-from-iterable" title="AddEntriesFromIterable ( target, iterable, adder )"><span class="secnum">24.1.1.2</span> AddEntriesFromIterable ( <var>target</var>, <var>iterable</var>, <var>adder</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-map-constructor" title="Properties of the Map Constructor"><span class="secnum">24.1.2</span> Properties of the Map Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.groupby" title="Map.groupBy ( items, callback )"><span class="secnum">24.1.2.1</span> Map.groupBy ( <var>items</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype" title="Map.prototype"><span class="secnum">24.1.2.2</span> Map.prototype</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-map-%symbol.species%" title="get Map [ %Symbol.species% ]"><span class="secnum">24.1.2.3</span> get Map [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-map-prototype-object" title="Properties of the Map Prototype Object"><span class="secnum">24.1.3</span> Properties of the Map Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.clear" title="Map.prototype.clear ( )"><span class="secnum">24.1.3.1</span> Map.prototype.clear ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.constructor" title="Map.prototype.constructor"><span class="secnum">24.1.3.2</span> Map.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.delete" title="Map.prototype.delete ( key )"><span class="secnum">24.1.3.3</span> Map.prototype.delete ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.entries" title="Map.prototype.entries ( )"><span class="secnum">24.1.3.4</span> Map.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.foreach" title="Map.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">24.1.3.5</span> Map.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.get" title="Map.prototype.get ( key )"><span class="secnum">24.1.3.6</span> Map.prototype.get ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.getorinsert" title="Map.prototype.getOrInsert ( key, value )"><span class="secnum">24.1.3.7</span> Map.prototype.getOrInsert ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.getorinsertcomputed" title="Map.prototype.getOrInsertComputed ( key, callback )"><span class="secnum">24.1.3.8</span> Map.prototype.getOrInsertComputed ( <var>key</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.has" title="Map.prototype.has ( key )"><span class="secnum">24.1.3.9</span> Map.prototype.has ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.keys" title="Map.prototype.keys ( )"><span class="secnum">24.1.3.10</span> Map.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.set" title="Map.prototype.set ( key, value )"><span class="secnum">24.1.3.11</span> Map.prototype.set ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-map.prototype.size" title="get Map.prototype.size"><span class="secnum">24.1.3.12</span> get Map.prototype.size</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype.values" title="Map.prototype.values ( )"><span class="secnum">24.1.3.13</span> Map.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype-%symbol.iterator%" title="Map.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">24.1.3.14</span> Map.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-map.prototype-%symbol.tostringtag%" title="Map.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.1.3.15</span> Map.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-map-instances" title="Properties of Map Instances"><span class="secnum">24.1.4</span> Properties of Map Instances</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-map-iterator-objects" title="Map Iterator Objects"><span class="secnum">24.1.5</span> Map Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-createmapiterator" title="CreateMapIterator ( map, kind )"><span class="secnum">24.1.5.1</span> CreateMapIterator ( <var>map</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-%mapiteratorprototype%-object" title="The %MapIteratorPrototype% Object"><span class="secnum">24.1.5.2</span> The %MapIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%mapiteratorprototype%.next" title="%MapIteratorPrototype%.next ( )"><span class="secnum">24.1.5.2.1</span> %MapIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%mapiteratorprototype%-%symbol.tostringtag%" title="%MapIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">24.1.5.2.2</span> %MapIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-objects" title="Set Objects"><span class="secnum">24.2</span> Set Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-abstract-operations-for-set-objects" title="Abstract Operations For Set Objects"><span class="secnum">24.2.1</span> Abstract Operations For Set Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set-records" title="Set Records"><span class="secnum">24.2.1.1</span> Set Records</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-getsetrecord" title="GetSetRecord ( obj )"><span class="secnum">24.2.1.2</span> GetSetRecord ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdatahas" title="SetDataHas ( setData, value )"><span class="secnum">24.2.1.3</span> SetDataHas ( <var>setData</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdataindex" title="SetDataIndex ( setData, value )"><span class="secnum">24.2.1.4</span> SetDataIndex ( <var>setData</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-setdatasize" title="SetDataSize ( setData )"><span class="secnum">24.2.1.5</span> SetDataSize ( <var>setData</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-constructor" title="The Set Constructor"><span class="secnum">24.2.2</span> The Set Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set-iterable" title="Set ( [ iterable ] )"><span class="secnum">24.2.2.1</span> Set ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-set-constructor" title="Properties of the Set Constructor"><span class="secnum">24.2.3</span> Properties of the Set Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype" title="Set.prototype"><span class="secnum">24.2.3.1</span> Set.prototype</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-set-%symbol.species%" title="get Set [ %Symbol.species% ]"><span class="secnum">24.2.3.2</span> get Set [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-set-prototype-object" title="Properties of the Set Prototype Object"><span class="secnum">24.2.4</span> Properties of the Set Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.add" title="Set.prototype.add ( value )"><span class="secnum">24.2.4.1</span> Set.prototype.add ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.clear" title="Set.prototype.clear ( )"><span class="secnum">24.2.4.2</span> Set.prototype.clear ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.constructor" title="Set.prototype.constructor"><span class="secnum">24.2.4.3</span> Set.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.delete" title="Set.prototype.delete ( value )"><span class="secnum">24.2.4.4</span> Set.prototype.delete ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.difference" title="Set.prototype.difference ( other )"><span class="secnum">24.2.4.5</span> Set.prototype.difference ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.entries" title="Set.prototype.entries ( )"><span class="secnum">24.2.4.6</span> Set.prototype.entries ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.foreach" title="Set.prototype.forEach ( callback [ , thisArg ] )"><span class="secnum">24.2.4.7</span> Set.prototype.forEach ( <var>callback</var> [ , <var>thisArg</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.has" title="Set.prototype.has ( value )"><span class="secnum">24.2.4.8</span> Set.prototype.has ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.intersection" title="Set.prototype.intersection ( other )"><span class="secnum">24.2.4.9</span> Set.prototype.intersection ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.isdisjointfrom" title="Set.prototype.isDisjointFrom ( other )"><span class="secnum">24.2.4.10</span> Set.prototype.isDisjointFrom ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.issubsetof" title="Set.prototype.isSubsetOf ( other )"><span class="secnum">24.2.4.11</span> Set.prototype.isSubsetOf ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.issupersetof" title="Set.prototype.isSupersetOf ( other )"><span class="secnum">24.2.4.12</span> Set.prototype.isSupersetOf ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.keys" title="Set.prototype.keys ( )"><span class="secnum">24.2.4.13</span> Set.prototype.keys ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-get-set.prototype.size" title="get Set.prototype.size"><span class="secnum">24.2.4.14</span> get Set.prototype.size</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.symmetricdifference" title="Set.prototype.symmetricDifference ( other )"><span class="secnum">24.2.4.15</span> Set.prototype.symmetricDifference ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.union" title="Set.prototype.union ( other )"><span class="secnum">24.2.4.16</span> Set.prototype.union ( <var>other</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype.values" title="Set.prototype.values ( )"><span class="secnum">24.2.4.17</span> Set.prototype.values ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype-%symbol.iterator%" title="Set.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">24.2.4.18</span> Set.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-set.prototype-%symbol.tostringtag%" title="Set.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.2.4.19</span> Set.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-set-instances" title="Properties of Set Instances"><span class="secnum">24.2.5</span> Properties of Set Instances</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-set-iterator-objects" title="Set Iterator Objects"><span class="secnum">24.2.6</span> Set Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-createsetiterator" title="CreateSetIterator ( set, kind )"><span class="secnum">24.2.6.1</span> CreateSetIterator ( <var>set</var>, <var>kind</var> )</a></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-%setiteratorprototype%-object" title="The %SetIteratorPrototype% Object"><span class="secnum">24.2.6.2</span> The %SetIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%setiteratorprototype%.next" title="%SetIteratorPrototype%.next ( )"><span class="secnum">24.2.6.2.1</span> %SetIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-%setiteratorprototype%-%symbol.tostringtag%" title="%SetIteratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">24.2.6.2.2</span> %SetIteratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakmap-objects" title="WeakMap Objects"><span class="secnum">24.3</span> WeakMap Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakmap-constructor" title="The WeakMap Constructor"><span class="secnum">24.3.1</span> The WeakMap Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap-iterable" title="WeakMap ( [ iterable ] )"><span class="secnum">24.3.1.1</span> WeakMap ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakmap-constructor" title="Properties of the WeakMap Constructor"><span class="secnum">24.3.2</span> Properties of the WeakMap Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype" title="WeakMap.prototype"><span class="secnum">24.3.2.1</span> WeakMap.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakmap-prototype-object" title="Properties of the WeakMap Prototype Object"><span class="secnum">24.3.3</span> Properties of the WeakMap Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.constructor" title="WeakMap.prototype.constructor"><span class="secnum">24.3.3.1</span> WeakMap.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.delete" title="WeakMap.prototype.delete ( key )"><span class="secnum">24.3.3.2</span> WeakMap.prototype.delete ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.get" title="WeakMap.prototype.get ( key )"><span class="secnum">24.3.3.3</span> WeakMap.prototype.get ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.getorinsert" title="WeakMap.prototype.getOrInsert ( key, value )"><span class="secnum">24.3.3.4</span> WeakMap.prototype.getOrInsert ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.getorinsertcomputed" title="WeakMap.prototype.getOrInsertComputed ( key, callback )"><span class="secnum">24.3.3.5</span> WeakMap.prototype.getOrInsertComputed ( <var>key</var>, <var>callback</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.has" title="WeakMap.prototype.has ( key )"><span class="secnum">24.3.3.6</span> WeakMap.prototype.has ( <var>key</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype.set" title="WeakMap.prototype.set ( key, value )"><span class="secnum">24.3.3.7</span> WeakMap.prototype.set ( <var>key</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakmap.prototype-%symbol.tostringtag%" title="WeakMap.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.3.3.8</span> WeakMap.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-weakmap-instances" title="Properties of WeakMap Instances"><span class="secnum">24.3.4</span> Properties of WeakMap Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakset-objects" title="WeakSet Objects"><span class="secnum">24.4</span> WeakSet Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-weakset-constructor" title="The WeakSet Constructor"><span class="secnum">24.4.1</span> The WeakSet Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset-iterable" title="WeakSet ( [ iterable ] )"><span class="secnum">24.4.1.1</span> WeakSet ( [ <var>iterable</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakset-constructor" title="Properties of the WeakSet Constructor"><span class="secnum">24.4.2</span> Properties of the WeakSet Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype" title="WeakSet.prototype"><span class="secnum">24.4.2.1</span> WeakSet.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-properties-of-the-weakset-prototype-object" title="Properties of the WeakSet Prototype Object"><span class="secnum">24.4.3</span> Properties of the WeakSet Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.add" title="WeakSet.prototype.add ( value )"><span class="secnum">24.4.3.1</span> WeakSet.prototype.add ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.constructor" title="WeakSet.prototype.constructor"><span class="secnum">24.4.3.2</span> WeakSet.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.delete" title="WeakSet.prototype.delete ( value )"><span class="secnum">24.4.3.3</span> WeakSet.prototype.delete ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype.has" title="WeakSet.prototype.has ( value )"><span class="secnum">24.4.3.4</span> WeakSet.prototype.has ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-weakset.prototype-%symbol.tostringtag%" title="WeakSet.prototype [ %Symbol.toStringTag% ]"><span class="secnum">24.4.3.5</span> WeakSet.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-properties-of-weakset-instances" title="Properties of WeakSet Instances"><span class="secnum">24.4.4</span> Properties of WeakSet Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="keyed-collections.html#sec-abstract-operations-for-keyed-collections" title="Abstract Operations for Keyed Collections"><span class="secnum">24.5</span> Abstract Operations for Keyed Collections</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="keyed-collections.html#sec-canonicalizekeyedcollectionkey" title="CanonicalizeKeyedCollectionKey ( key )"><span class="secnum">24.5.1</span> CanonicalizeKeyedCollectionKey ( <var>key</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-structured-data" title="Structured Data"><span class="secnum">25</span> Structured Data</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-arraybuffer-objects" title="ArrayBuffer Objects"><span class="secnum">25.1</span> ArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer-notation" title="Notation"><span class="secnum">25.1.1</span> Notation</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-fixed-length-and-resizable-arraybuffer-objects" title="Fixed-length and Resizable ArrayBuffer Objects"><span class="secnum">25.1.2</span> Fixed-length and Resizable ArrayBuffer Objects</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-arraybuffer-objects" title="Abstract Operations For ArrayBuffer Objects"><span class="secnum">25.1.3</span> Abstract Operations For ArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-allocatearraybuffer" title="AllocateArrayBuffer ( constructor, byteLength [ , maxByteLength ] )"><span class="secnum">25.1.3.1</span> AllocateArrayBuffer ( <var>constructor</var>, <var>byteLength</var> [ , <var>maxByteLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybufferbytelength" title="ArrayBufferByteLength ( arrayBuffer, order )"><span class="secnum">25.1.3.2</span> ArrayBufferByteLength ( <var>arrayBuffer</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffercopyanddetach" title="ArrayBufferCopyAndDetach ( arrayBuffer, newLength, preserveResizability )"><span class="secnum">25.1.3.3</span> ArrayBufferCopyAndDetach ( <var>arrayBuffer</var>, <var>newLength</var>, <var>preserveResizability</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isdetachedbuffer" title="IsDetachedBuffer ( arrayBuffer )"><span class="secnum">25.1.3.4</span> IsDetachedBuffer ( <var>arrayBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-detacharraybuffer" title="DetachArrayBuffer ( arrayBuffer [ , key ] )"><span class="secnum">25.1.3.5</span> DetachArrayBuffer ( <var>arrayBuffer</var> [ , <var>key</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-clonearraybuffer" title="CloneArrayBuffer ( srcBuffer, srcByteOffset, srcLength )"><span class="secnum">25.1.3.6</span> CloneArrayBuffer ( <var>srcBuffer</var>, <var>srcByteOffset</var>, <var>srcLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getarraybuffermaxbytelengthoption" title="GetArrayBufferMaxByteLengthOption ( options )"><span class="secnum">25.1.3.7</span> GetArrayBufferMaxByteLengthOption ( <var>options</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-hostresizearraybuffer" title="HostResizeArrayBuffer ( buffer, newByteLength )"><span class="secnum">25.1.3.8</span> HostResizeArrayBuffer ( <var>buffer</var>, <var>newByteLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isfixedlengtharraybuffer" title="IsFixedLengthArrayBuffer ( arrayBuffer )"><span class="secnum">25.1.3.9</span> IsFixedLengthArrayBuffer ( <var>arrayBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isunsignedelementtype" title="IsUnsignedElementType ( type )"><span class="secnum">25.1.3.10</span> IsUnsignedElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isunclampedintegerelementtype" title="IsUnclampedIntegerElementType ( type )"><span class="secnum">25.1.3.11</span> IsUnclampedIntegerElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isbigintelementtype" title="IsBigIntElementType ( type )"><span class="secnum">25.1.3.12</span> IsBigIntElementType ( <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isnotearconfiguration" title="IsNoTearConfiguration ( type, order )"><span class="secnum">25.1.3.13</span> IsNoTearConfiguration ( <var>type</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-rawbytestonumeric" title="RawBytesToNumeric ( type, rawBytes, isLittleEndian )"><span class="secnum">25.1.3.14</span> RawBytesToNumeric ( <var>type</var>, <var>rawBytes</var>, <var>isLittleEndian</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getrawbytesfromsharedblock" title="GetRawBytesFromSharedBlock ( block, byteIndex, type, isTypedArray, order )"><span class="secnum">25.1.3.15</span> GetRawBytesFromSharedBlock ( <var>block</var>, <var>byteIndex</var>, <var>type</var>, <var>isTypedArray</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getvaluefrombuffer" title="GetValueFromBuffer ( arrayBuffer, byteIndex, type, isTypedArray, order [ , isLittleEndian ] )"><span class="secnum">25.1.3.16</span> GetValueFromBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>isTypedArray</var>, <var>order</var> [ , <var>isLittleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-numerictorawbytes" title="NumericToRawBytes ( type, value, isLittleEndian )"><span class="secnum">25.1.3.17</span> NumericToRawBytes ( <var>type</var>, <var>value</var>, <var>isLittleEndian</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-setvalueinbuffer" title="SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] )"><span class="secnum">25.1.3.18</span> SetValueInBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>value</var>, <var>isTypedArray</var>, <var>order</var> [ , <var>isLittleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getmodifysetvalueinbuffer" title="GetModifySetValueInBuffer ( arrayBuffer, byteIndex, type, value, op )"><span class="secnum">25.1.3.19</span> GetModifySetValueInBuffer ( <var>arrayBuffer</var>, <var>byteIndex</var>, <var>type</var>, <var>value</var>, <var>op</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-arraybuffer-constructor" title="The ArrayBuffer Constructor"><span class="secnum">25.1.4</span> The ArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer-length" title="ArrayBuffer ( length [ , options ] )"><span class="secnum">25.1.4.1</span> ArrayBuffer ( <var>length</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-arraybuffer-constructor" title="Properties of the ArrayBuffer Constructor"><span class="secnum">25.1.5</span> Properties of the ArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.isview" title="ArrayBuffer.isView ( arg )"><span class="secnum">25.1.5.1</span> ArrayBuffer.isView ( <var>arg</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype" title="ArrayBuffer.prototype"><span class="secnum">25.1.5.2</span> ArrayBuffer.prototype</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer-%symbol.species%" title="get ArrayBuffer [ %Symbol.species% ]"><span class="secnum">25.1.5.3</span> get ArrayBuffer [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-arraybuffer-prototype-object" title="Properties of the ArrayBuffer Prototype Object"><span class="secnum">25.1.6</span> Properties of the ArrayBuffer Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.bytelength" title="get ArrayBuffer.prototype.byteLength"><span class="secnum">25.1.6.1</span> get ArrayBuffer.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.constructor" title="ArrayBuffer.prototype.constructor"><span class="secnum">25.1.6.2</span> ArrayBuffer.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.detached" title="get ArrayBuffer.prototype.detached"><span class="secnum">25.1.6.3</span> get ArrayBuffer.prototype.detached</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.maxbytelength" title="get ArrayBuffer.prototype.maxByteLength"><span class="secnum">25.1.6.4</span> get ArrayBuffer.prototype.maxByteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-arraybuffer.prototype.resizable" title="get ArrayBuffer.prototype.resizable"><span class="secnum">25.1.6.5</span> get ArrayBuffer.prototype.resizable</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.resize" title="ArrayBuffer.prototype.resize ( newLength )"><span class="secnum">25.1.6.6</span> ArrayBuffer.prototype.resize ( <var>newLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.slice" title="ArrayBuffer.prototype.slice ( start, end )"><span class="secnum">25.1.6.7</span> ArrayBuffer.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.transfer" title="ArrayBuffer.prototype.transfer ( [ newLength ] )"><span class="secnum">25.1.6.8</span> ArrayBuffer.prototype.transfer ( [ <var>newLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype.transfertofixedlength" title="ArrayBuffer.prototype.transferToFixedLength ( [ newLength ] )"><span class="secnum">25.1.6.9</span> ArrayBuffer.prototype.transferToFixedLength ( [ <var>newLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-arraybuffer.prototype-%symbol.tostringtag%" title="ArrayBuffer.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.1.6.10</span> ArrayBuffer.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-the-arraybuffer-instances" title="Properties of ArrayBuffer Instances"><span class="secnum">25.1.7</span> Properties of ArrayBuffer Instances</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-resizable-arraybuffer-guidelines" title="Resizable ArrayBuffer Guidelines"><span class="secnum">25.1.8</span> Resizable ArrayBuffer Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-sharedarraybuffer-objects" title="SharedArrayBuffer Objects"><span class="secnum">25.2</span> SharedArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-fixed-length-and-growable-sharedarraybuffer-objects" title="Fixed-length and Growable SharedArrayBuffer Objects"><span class="secnum">25.2.1</span> Fixed-length and Growable SharedArrayBuffer Objects</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-sharedarraybuffer-objects" title="Abstract Operations for SharedArrayBuffer Objects"><span class="secnum">25.2.2</span> Abstract Operations for SharedArrayBuffer Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-allocatesharedarraybuffer" title="AllocateSharedArrayBuffer ( constructor, byteLength [ , maxByteLength ] )"><span class="secnum">25.2.2.1</span> AllocateSharedArrayBuffer ( <var>constructor</var>, <var>byteLength</var> [ , <var>maxByteLength</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-issharedarraybuffer" title="IsSharedArrayBuffer ( obj )"><span class="secnum">25.2.2.2</span> IsSharedArrayBuffer ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isgrowablesharedarraybuffer" title="IsGrowableSharedArrayBuffer ( obj )"><span class="secnum">25.2.2.3</span> IsGrowableSharedArrayBuffer ( <var>obj</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-hostgrowsharedarraybuffer" title="HostGrowSharedArrayBuffer ( buffer, newByteLength )"><span class="secnum">25.2.2.4</span> HostGrowSharedArrayBuffer ( <var>buffer</var>, <var>newByteLength</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-sharedarraybuffer-constructor" title="The SharedArrayBuffer Constructor"><span class="secnum">25.2.3</span> The SharedArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer-length" title="SharedArrayBuffer ( length [ , options ] )"><span class="secnum">25.2.3.1</span> SharedArrayBuffer ( <var>length</var> [ , <var>options</var> ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-constructor" title="Properties of the SharedArrayBuffer Constructor"><span class="secnum">25.2.4</span> Properties of the SharedArrayBuffer Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype" title="SharedArrayBuffer.prototype"><span class="secnum">25.2.4.1</span> SharedArrayBuffer.prototype</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer-%symbol.species%" title="get SharedArrayBuffer [ %Symbol.species% ]"><span class="secnum">25.2.4.2</span> get SharedArrayBuffer [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-prototype-object" title="Properties of the SharedArrayBuffer Prototype Object"><span class="secnum">25.2.5</span> Properties of the SharedArrayBuffer Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.bytelength" title="get SharedArrayBuffer.prototype.byteLength"><span class="secnum">25.2.5.1</span> get SharedArrayBuffer.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.constructor" title="SharedArrayBuffer.prototype.constructor"><span class="secnum">25.2.5.2</span> SharedArrayBuffer.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.grow" title="SharedArrayBuffer.prototype.grow ( newLength )"><span class="secnum">25.2.5.3</span> SharedArrayBuffer.prototype.grow ( <var>newLength</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.growable" title="get SharedArrayBuffer.prototype.growable"><span class="secnum">25.2.5.4</span> get SharedArrayBuffer.prototype.growable</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-sharedarraybuffer.prototype.maxbytelength" title="get SharedArrayBuffer.prototype.maxByteLength"><span class="secnum">25.2.5.5</span> get SharedArrayBuffer.prototype.maxByteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype.slice" title="SharedArrayBuffer.prototype.slice ( start, end )"><span class="secnum">25.2.5.6</span> SharedArrayBuffer.prototype.slice ( <var>start</var>, <var>end</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-sharedarraybuffer.prototype-%symbol.tostringtag%" title="SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.2.5.7</span> SharedArrayBuffer.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-the-sharedarraybuffer-instances" title="Properties of SharedArrayBuffer Instances"><span class="secnum">25.2.6</span> Properties of SharedArrayBuffer Instances</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-growable-sharedarraybuffer-guidelines" title="Growable SharedArrayBuffer Guidelines"><span class="secnum">25.2.7</span> Growable SharedArrayBuffer Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-dataview-objects" title="DataView Objects"><span class="secnum">25.3</span> DataView Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-dataview-objects" title="Abstract Operations For DataView Objects"><span class="secnum">25.3.1</span> Abstract Operations For DataView Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview-with-buffer-witness-records" title="DataView With Buffer Witness Records"><span class="secnum">25.3.1.1</span> DataView With Buffer Witness Records</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-makedataviewwithbufferwitnessrecord" title="MakeDataViewWithBufferWitnessRecord ( obj, order )"><span class="secnum">25.3.1.2</span> MakeDataViewWithBufferWitnessRecord ( <var>obj</var>, <var>order</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getviewbytelength" title="GetViewByteLength ( viewRecord )"><span class="secnum">25.3.1.3</span> GetViewByteLength ( <var>viewRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-isviewoutofbounds" title="IsViewOutOfBounds ( viewRecord )"><span class="secnum">25.3.1.4</span> IsViewOutOfBounds ( <var>viewRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getviewvalue" title="GetViewValue ( view, requestIndex, isLittleEndian, type )"><span class="secnum">25.3.1.5</span> GetViewValue ( <var>view</var>, <var>requestIndex</var>, <var>isLittleEndian</var>, <var>type</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-setviewvalue" title="SetViewValue ( view, requestIndex, isLittleEndian, type, value )"><span class="secnum">25.3.1.6</span> SetViewValue ( <var>view</var>, <var>requestIndex</var>, <var>isLittleEndian</var>, <var>type</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-dataview-constructor" title="The DataView Constructor"><span class="secnum">25.3.2</span> The DataView Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview-buffer-byteoffset-bytelength" title="DataView ( buffer [ , byteOffset [ , byteLength ] ] )"><span class="secnum">25.3.2.1</span> DataView ( <var>buffer</var> [ , <var>byteOffset</var> [ , <var>byteLength</var> ] ] )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-dataview-constructor" title="Properties of the DataView Constructor"><span class="secnum">25.3.3</span> Properties of the DataView Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype" title="DataView.prototype"><span class="secnum">25.3.3.1</span> DataView.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-properties-of-the-dataview-prototype-object" title="Properties of the DataView Prototype Object"><span class="secnum">25.3.4</span> Properties of the DataView Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.buffer" title="get DataView.prototype.buffer"><span class="secnum">25.3.4.1</span> get DataView.prototype.buffer</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.bytelength" title="get DataView.prototype.byteLength"><span class="secnum">25.3.4.2</span> get DataView.prototype.byteLength</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-get-dataview.prototype.byteoffset" title="get DataView.prototype.byteOffset"><span class="secnum">25.3.4.3</span> get DataView.prototype.byteOffset</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.constructor" title="DataView.prototype.constructor"><span class="secnum">25.3.4.4</span> DataView.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getbigint64" title="DataView.prototype.getBigInt64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.5</span> DataView.prototype.getBigInt64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getbiguint64" title="DataView.prototype.getBigUint64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.6</span> DataView.prototype.getBigUint64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat16" title="DataView.prototype.getFloat16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.7</span> DataView.prototype.getFloat16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat32" title="DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.8</span> DataView.prototype.getFloat32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getfloat64" title="DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.9</span> DataView.prototype.getFloat64 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint8" title="DataView.prototype.getInt8 ( byteOffset )"><span class="secnum">25.3.4.10</span> DataView.prototype.getInt8 ( <var>byteOffset</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint16" title="DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.11</span> DataView.prototype.getInt16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getint32" title="DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.12</span> DataView.prototype.getInt32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint8" title="DataView.prototype.getUint8 ( byteOffset )"><span class="secnum">25.3.4.13</span> DataView.prototype.getUint8 ( <var>byteOffset</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint16" title="DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.14</span> DataView.prototype.getUint16 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.getuint32" title="DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )"><span class="secnum">25.3.4.15</span> DataView.prototype.getUint32 ( <var>byteOffset</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setbigint64" title="DataView.prototype.setBigInt64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.16</span> DataView.prototype.setBigInt64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setbiguint64" title="DataView.prototype.setBigUint64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.17</span> DataView.prototype.setBigUint64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat16" title="DataView.prototype.setFloat16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.18</span> DataView.prototype.setFloat16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat32" title="DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.19</span> DataView.prototype.setFloat32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setfloat64" title="DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.20</span> DataView.prototype.setFloat64 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint8" title="DataView.prototype.setInt8 ( byteOffset, value )"><span class="secnum">25.3.4.21</span> DataView.prototype.setInt8 ( <var>byteOffset</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint16" title="DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.22</span> DataView.prototype.setInt16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setint32" title="DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.23</span> DataView.prototype.setInt32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint8" title="DataView.prototype.setUint8 ( byteOffset, value )"><span class="secnum">25.3.4.24</span> DataView.prototype.setUint8 ( <var>byteOffset</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint16" title="DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.25</span> DataView.prototype.setUint16 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype.setuint32" title="DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )"><span class="secnum">25.3.4.26</span> DataView.prototype.setUint32 ( <var>byteOffset</var>, <var>value</var> [ , <var>littleEndian</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dataview.prototype-%symbol.tostringtag%" title="DataView.prototype [ %Symbol.toStringTag% ]"><span class="secnum">25.3.4.27</span> DataView.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-properties-of-dataview-instances" title="Properties of DataView Instances"><span class="secnum">25.3.5</span> Properties of DataView Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-atomics-object" title="The Atomics Object"><span class="secnum">25.4</span> The Atomics Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-waiter-record" title="Waiter Record"><span class="secnum">25.4.1</span> Waiter Record</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-waiterlist-records" title="WaiterList Records"><span class="secnum">25.4.2</span> WaiterList Records</a></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-abstract-operations-for-atomics" title="Abstract Operations for Atomics"><span class="secnum">25.4.3</span> Abstract Operations for Atomics</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateintegertypedarray" title="ValidateIntegerTypedArray ( typedArray, waitable )"><span class="secnum">25.4.3.1</span> ValidateIntegerTypedArray ( <var>typedArray</var>, <var>waitable</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateatomicaccess" title="ValidateAtomicAccess ( taRecord, requestIndex )"><span class="secnum">25.4.3.2</span> ValidateAtomicAccess ( <var>taRecord</var>, <var>requestIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-validateatomicaccessonintegertypedarray" title="ValidateAtomicAccessOnIntegerTypedArray ( typedArray, requestIndex )"><span class="secnum">25.4.3.3</span> ValidateAtomicAccessOnIntegerTypedArray ( <var>typedArray</var>, <var>requestIndex</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-revalidateatomicaccess" title="RevalidateAtomicAccess ( typedArray, byteIndexInBuffer )"><span class="secnum">25.4.3.4</span> RevalidateAtomicAccess ( <var>typedArray</var>, <var>byteIndexInBuffer</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-getwaiterlist" title="GetWaiterList ( block, i )"><span class="secnum">25.4.3.5</span> GetWaiterList ( <var>block</var>, <var>i</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-entercriticalsection" title="EnterCriticalSection ( WL )"><span class="secnum">25.4.3.6</span> EnterCriticalSection ( <var>WL</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-leavecriticalsection" title="LeaveCriticalSection ( WL )"><span class="secnum">25.4.3.7</span> LeaveCriticalSection ( <var>WL</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-addwaiter" title="AddWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.8</span> AddWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-removewaiter" title="RemoveWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.9</span> RemoveWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-removewaiters" title="RemoveWaiters ( WL, c )"><span class="secnum">25.4.3.10</span> RemoveWaiters ( <var>WL</var>, <var>c</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-suspendthisagent" title="SuspendThisAgent ( WL, waiterRecord )"><span class="secnum">25.4.3.11</span> SuspendThisAgent ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-notifywaiter" title="NotifyWaiter ( WL, waiterRecord )"><span class="secnum">25.4.3.12</span> NotifyWaiter ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-enqueueresolveinagentjob" title="EnqueueResolveInAgentJob ( agentSignifier, promiseCapability, resolution )"><span class="secnum">25.4.3.13</span> EnqueueResolveInAgentJob ( <var>agentSignifier</var>, <var>promiseCapability</var>, <var>resolution</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-dowait" title="DoWait ( mode, typedArray, index, value, timeout )"><span class="secnum">25.4.3.14</span> DoWait ( <var>mode</var>, <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-enqueueatomicswaitasynctimeoutjob" title="EnqueueAtomicsWaitAsyncTimeoutJob ( WL, waiterRecord )"><span class="secnum">25.4.3.15</span> EnqueueAtomicsWaitAsyncTimeoutJob ( <var>WL</var>, <var>waiterRecord</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomiccompareexchangeinsharedblock" title="AtomicCompareExchangeInSharedBlock ( block, byteIndexInBuffer, elementSize, expectedBytes, replacementBytes )"><span class="secnum">25.4.3.16</span> AtomicCompareExchangeInSharedBlock ( <var>block</var>, <var>byteIndexInBuffer</var>, <var>elementSize</var>, <var>expectedBytes</var>, <var>replacementBytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomicreadmodifywrite" title="AtomicReadModifyWrite ( typedArray, index, value, op )"><span class="secnum">25.4.3.17</span> AtomicReadModifyWrite ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>op</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-bytelistbitwiseop" title="ByteListBitwiseOp ( op, xBytes, yBytes )"><span class="secnum">25.4.3.18</span> ByteListBitwiseOp ( <var>op</var>, <var>xBytes</var>, <var>yBytes</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-bytelistequal" title="ByteListEqual ( xBytes, yBytes )"><span class="secnum">25.4.3.19</span> ByteListEqual ( <var>xBytes</var>, <var>yBytes</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.add" title="Atomics.add ( typedArray, index, value )"><span class="secnum">25.4.4</span> Atomics.add ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.and" title="Atomics.and ( typedArray, index, value )"><span class="secnum">25.4.5</span> Atomics.and ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.compareexchange" title="Atomics.compareExchange ( typedArray, index, expectedValue, replacementValue )"><span class="secnum">25.4.6</span> Atomics.compareExchange ( <var>typedArray</var>, <var>index</var>, <var>expectedValue</var>, <var>replacementValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.exchange" title="Atomics.exchange ( typedArray, index, value )"><span class="secnum">25.4.7</span> Atomics.exchange ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.islockfree" title="Atomics.isLockFree ( size )"><span class="secnum">25.4.8</span> Atomics.isLockFree ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.load" title="Atomics.load ( typedArray, index )"><span class="secnum">25.4.9</span> Atomics.load ( <var>typedArray</var>, <var>index</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.or" title="Atomics.or ( typedArray, index, value )"><span class="secnum">25.4.10</span> Atomics.or ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.store" title="Atomics.store ( typedArray, index, value )"><span class="secnum">25.4.11</span> Atomics.store ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.sub" title="Atomics.sub ( typedArray, index, value )"><span class="secnum">25.4.12</span> Atomics.sub ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.wait" title="Atomics.wait ( typedArray, index, value, timeout )"><span class="secnum">25.4.13</span> Atomics.wait ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.waitasync" title="Atomics.waitAsync ( typedArray, index, value, timeout )"><span class="secnum">25.4.14</span> Atomics.waitAsync ( <var>typedArray</var>, <var>index</var>, <var>value</var>, <var>timeout</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.notify" title="Atomics.notify ( typedArray, index, count )"><span class="secnum">25.4.15</span> Atomics.notify ( <var>typedArray</var>, <var>index</var>, <var>count</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics.xor" title="Atomics.xor ( typedArray, index, value )"><span class="secnum">25.4.16</span> Atomics.xor ( <var>typedArray</var>, <var>index</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-atomics-%symbol.tostringtag%" title="Atomics [ %Symbol.toStringTag% ]"><span class="secnum">25.4.17</span> Atomics [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json-object" title="The JSON Object"><span class="secnum">25.5</span> The JSON Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json.parse" title="JSON.parse ( text [ , reviver ] )"><span class="secnum">25.5.1</span> JSON.parse ( <var>text</var> [ , <var>reviver</var> ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-ParseJSON" title="ParseJSON ( text )"><span class="secnum">25.5.1.1</span> ParseJSON ( <var>text</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-internalizejsonproperty" title="InternalizeJSONProperty ( holder, name, reviver )"><span class="secnum">25.5.1.2</span> InternalizeJSONProperty ( <var>holder</var>, <var>name</var>, <var>reviver</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="structured-data.html#sec-json.stringify" title="JSON.stringify ( value [ , replacer [ , space ] ] )"><span class="secnum">25.5.2</span> JSON.stringify ( <var>value</var> [ , <var>replacer</var> [ , <var>space</var> ] ] )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-json-serialization-record" title="JSON Serialization Record"><span class="secnum">25.5.2.1</span> JSON Serialization Record</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonproperty" title="SerializeJSONProperty ( state, key, holder )"><span class="secnum">25.5.2.2</span> SerializeJSONProperty ( <var>state</var>, <var>key</var>, <var>holder</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-quotejsonstring" title="QuoteJSONString ( value )"><span class="secnum">25.5.2.3</span> QuoteJSONString ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-unicodeescape" title="UnicodeEscape ( C )"><span class="secnum">25.5.2.4</span> UnicodeEscape ( <var>C</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonobject" title="SerializeJSONObject ( state, value )"><span class="secnum">25.5.2.5</span> SerializeJSONObject ( <var>state</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-serializejsonarray" title="SerializeJSONArray ( state, value )"><span class="secnum">25.5.2.6</span> SerializeJSONArray ( <var>state</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="structured-data.html#sec-json-%symbol.tostringtag%" title="JSON [ %Symbol.toStringTag% ]"><span class="secnum">25.5.3</span> JSON [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-managing-memory" title="Managing Memory"><span class="secnum">26</span> Managing Memory</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weak-ref-objects" title="WeakRef Objects"><span class="secnum">26.1</span> WeakRef Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weak-ref-constructor" title="The WeakRef Constructor"><span class="secnum">26.1.1</span> The WeakRef Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref-target" title="WeakRef ( target )"><span class="secnum">26.1.1.1</span> WeakRef ( <var>target</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-weak-ref-constructor" title="Properties of the WeakRef Constructor"><span class="secnum">26.1.2</span> Properties of the WeakRef Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype" title="WeakRef.prototype"><span class="secnum">26.1.2.1</span> WeakRef.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-weak-ref-prototype-object" title="Properties of the WeakRef Prototype Object"><span class="secnum">26.1.3</span> Properties of the WeakRef Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype.constructor" title="WeakRef.prototype.constructor"><span class="secnum">26.1.3.1</span> WeakRef.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype.deref" title="WeakRef.prototype.deref ( )"><span class="secnum">26.1.3.2</span> WeakRef.prototype.deref ( )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weak-ref.prototype-%symbol.tostringtag%" title="WeakRef.prototype [ %Symbol.toStringTag% ]"><span class="secnum">26.1.3.3</span> WeakRef.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-weakref-abstract-operations" title="WeakRef Abstract Operations"><span class="secnum">26.1.4</span> WeakRef Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-weakrefderef" title="WeakRefDeref ( weakRef )"><span class="secnum">26.1.4.1</span> WeakRefDeref ( <var>weakRef</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-properties-of-weak-ref-instances" title="Properties of WeakRef Instances"><span class="secnum">26.1.5</span> Properties of WeakRef Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-finalization-registry-objects" title="FinalizationRegistry Objects"><span class="secnum">26.2</span> FinalizationRegistry Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-finalization-registry-constructor" title="The FinalizationRegistry Constructor"><span class="secnum">26.2.1</span> The FinalizationRegistry Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry-cleanup-callback" title="FinalizationRegistry ( cleanupCallback )"><span class="secnum">26.2.1.1</span> FinalizationRegistry ( <var>cleanupCallback</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-finalization-registry-constructor" title="Properties of the FinalizationRegistry Constructor"><span class="secnum">26.2.2</span> Properties of the FinalizationRegistry Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype" title="FinalizationRegistry.prototype"><span class="secnum">26.2.2.1</span> FinalizationRegistry.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="managing-memory.html#sec-properties-of-the-finalization-registry-prototype-object" title="Properties of the FinalizationRegistry Prototype Object"><span class="secnum">26.2.3</span> Properties of the FinalizationRegistry Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.constructor" title="FinalizationRegistry.prototype.constructor"><span class="secnum">26.2.3.1</span> FinalizationRegistry.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.register" title="FinalizationRegistry.prototype.register ( target, heldValue [ , unregisterToken ] )"><span class="secnum">26.2.3.2</span> FinalizationRegistry.prototype.register ( <var>target</var>, <var>heldValue</var> [ , <var>unregisterToken</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype.unregister" title="FinalizationRegistry.prototype.unregister ( unregisterToken )"><span class="secnum">26.2.3.3</span> FinalizationRegistry.prototype.unregister ( <var>unregisterToken</var> )</a></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-finalization-registry.prototype-%symbol.tostringtag%" title="FinalizationRegistry.prototype [ %Symbol.toStringTag% ]"><span class="secnum">26.2.3.4</span> FinalizationRegistry.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="managing-memory.html#sec-properties-of-finalization-registry-instances" title="Properties of FinalizationRegistry Instances"><span class="secnum">26.2.4</span> Properties of FinalizationRegistry Instances</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-control-abstraction-objects" title="Control Abstraction Objects"><span class="secnum">27</span> Control Abstraction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iteration" title="Iteration"><span class="secnum">27.1</span> Iteration</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-common-iteration-interfaces" title="Common Iteration Interfaces"><span class="secnum">27.1.1</span> Common Iteration Interfaces</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterable-interface" title="The Iterable Interface"><span class="secnum">27.1.1.1</span> The Iterable Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator-interface" title="The Iterator Interface"><span class="secnum">27.1.1.2</span> The Iterator Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asynciterable-interface" title="The Async Iterable Interface"><span class="secnum">27.1.1.3</span> The Async Iterable Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asynciterator-interface" title="The Async Iterator Interface"><span class="secnum">27.1.1.4</span> The Async Iterator Interface</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iteratorresult-interface" title="The IteratorResult Interface"><span class="secnum">27.1.1.5</span> The IteratorResult Interface</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-helper-objects" title="Iterator Helper Objects"><span class="secnum">27.1.2</span> Iterator Helper Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%-object" title="The %IteratorHelperPrototype% Object"><span class="secnum">27.1.2.1</span> The %IteratorHelperPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%.next" title="%IteratorHelperPrototype%.next ( )"><span class="secnum">27.1.2.1.1</span> %IteratorHelperPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%.return" title="%IteratorHelperPrototype%.return ( )"><span class="secnum">27.1.2.1.2</span> %IteratorHelperPrototype%.return ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%iteratorhelperprototype%-%symbol.tostringtag%" title="%IteratorHelperPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.1.2.1.3</span> %IteratorHelperPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-objects" title="Iterator Objects"><span class="secnum">27.1.3</span> Iterator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator-constructor" title="The Iterator Constructor"><span class="secnum">27.1.3.1</span> The Iterator Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator" title="Iterator ( )"><span class="secnum">27.1.3.1.1</span> Iterator ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-iterator-constructor" title="Properties of the Iterator Constructor"><span class="secnum">27.1.3.2</span> Properties of the Iterator Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.concat" title="Iterator.concat ( ...items )"><span class="secnum">27.1.3.2.1</span> Iterator.concat ( ...<var>items</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.from" title="Iterator.from ( O )"><span class="secnum">27.1.3.2.2</span> Iterator.from ( <var>O</var> )</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%-object" title="The %WrapForValidIteratorPrototype% Object"><span class="secnum">27.1.3.2.2.1</span> The %WrapForValidIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%.next" title="%WrapForValidIteratorPrototype%.next ( )"><span class="secnum">27.1.3.2.2.1.1</span> %WrapForValidIteratorPrototype%.next ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%wrapforvaliditeratorprototype%.return" title="%WrapForValidIteratorPrototype%.return ( )"><span class="secnum">27.1.3.2.2.1.2</span> %WrapForValidIteratorPrototype%.return ( )</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype" title="Iterator.prototype"><span class="secnum">27.1.3.2.3</span> Iterator.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%iterator.prototype%-object" title="Properties of the Iterator Prototype Object"><span class="secnum">27.1.3.3</span> Properties of the Iterator Prototype Object</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.prototype.constructor" title="Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1</span> Iterator.prototype.constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-iterator.prototype.constructor" title="get Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1.1</span> get Iterator.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-set-iterator.prototype.constructor" title="set Iterator.prototype.constructor"><span class="secnum">27.1.3.3.1.2</span> set Iterator.prototype.constructor</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.drop" title="Iterator.prototype.drop ( limit )"><span class="secnum">27.1.3.3.2</span> Iterator.prototype.drop ( <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.every" title="Iterator.prototype.every ( predicate )"><span class="secnum">27.1.3.3.3</span> Iterator.prototype.every ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.filter" title="Iterator.prototype.filter ( predicate )"><span class="secnum">27.1.3.3.4</span> Iterator.prototype.filter ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.find" title="Iterator.prototype.find ( predicate )"><span class="secnum">27.1.3.3.5</span> Iterator.prototype.find ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.flatmap" title="Iterator.prototype.flatMap ( mapper )"><span class="secnum">27.1.3.3.6</span> Iterator.prototype.flatMap ( <var>mapper</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.foreach" title="Iterator.prototype.forEach ( procedure )"><span class="secnum">27.1.3.3.7</span> Iterator.prototype.forEach ( <var>procedure</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.map" title="Iterator.prototype.map ( mapper )"><span class="secnum">27.1.3.3.8</span> Iterator.prototype.map ( <var>mapper</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.reduce" title="Iterator.prototype.reduce ( reducer [ , initialValue ] )"><span class="secnum">27.1.3.3.9</span> Iterator.prototype.reduce ( <var>reducer</var> [ , <var>initialValue</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.some" title="Iterator.prototype.some ( predicate )"><span class="secnum">27.1.3.3.10</span> Iterator.prototype.some ( <var>predicate</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.take" title="Iterator.prototype.take ( limit )"><span class="secnum">27.1.3.3.11</span> Iterator.prototype.take ( <var>limit</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype.toarray" title="Iterator.prototype.toArray ( )"><span class="secnum">27.1.3.3.12</span> Iterator.prototype.toArray ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-iterator.prototype-%symbol.iterator%" title="Iterator.prototype [ %Symbol.iterator% ] ( )"><span class="secnum">27.1.3.3.13</span> Iterator.prototype [ %Symbol.iterator% ] ( )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-iterator.prototype-%symbol.tostringtag%" title="Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14</span> Iterator.prototype [ %Symbol.toStringTag% ]</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-iterator.prototype-%symbol.tostringtag%" title="get Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14.1</span> get Iterator.prototype [ %Symbol.toStringTag% ]</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-set-iterator.prototype-%symbol.tostringtag%" title="set Iterator.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.1.3.3.14.2</span> set Iterator.prototype [ %Symbol.toStringTag% ]</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asynciteratorprototype" title="The %AsyncIteratorPrototype% Object"><span class="secnum">27.1.4</span> The %AsyncIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asynciteratorprototype%-%symbol.asynciterator%" title="%AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )"><span class="secnum">27.1.4.1</span> %AsyncIteratorPrototype% [ %Symbol.asyncIterator% ] ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-from-sync-iterator-objects" title="Async-from-Sync Iterator Objects"><span class="secnum">27.1.5</span> Async-from-Sync Iterator Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createasyncfromsynciterator" title="CreateAsyncFromSyncIterator ( syncIteratorRecord )"><span class="secnum">27.1.5.1</span> CreateAsyncFromSyncIterator ( <var>syncIteratorRecord</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%-object" title="The %AsyncFromSyncIteratorPrototype% Object"><span class="secnum">27.1.5.2</span> The %AsyncFromSyncIteratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.next" title="%AsyncFromSyncIteratorPrototype%.next ( [ value ] )"><span class="secnum">27.1.5.2.1</span> %AsyncFromSyncIteratorPrototype%.next ( [ <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.return" title="%AsyncFromSyncIteratorPrototype%.return ( [ value ] )"><span class="secnum">27.1.5.2.2</span> %AsyncFromSyncIteratorPrototype%.return ( [ <var>value</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-%asyncfromsynciteratorprototype%.throw" title="%AsyncFromSyncIteratorPrototype%.throw ( [ value ] )"><span class="secnum">27.1.5.2.3</span> %AsyncFromSyncIteratorPrototype%.throw ( [ <var>value</var> ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-async-from-sync-iterator-instances" title="Properties of Async-from-Sync Iterator Instances"><span class="secnum">27.1.5.3</span> Properties of Async-from-Sync Iterator Instances</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncfromsynciteratorcontinuation" title="AsyncFromSyncIteratorContinuation ( result, promiseCapability, syncIteratorRecord, closeOnRejection )"><span class="secnum">27.1.5.4</span> AsyncFromSyncIteratorContinuation ( <var>result</var>, <var>promiseCapability</var>, <var>syncIteratorRecord</var>, <var>closeOnRejection</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-objects" title="Promise Objects"><span class="secnum">27.2</span> Promise Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-abstract-operations" title="Promise Abstract Operations"><span class="secnum">27.2.1</span> Promise Abstract Operations</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promisecapability-records" title="PromiseCapability Records"><span class="secnum">27.2.1.1</span> PromiseCapability Records</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-ifabruptrejectpromise" title="IfAbruptRejectPromise ( value, capability )"><span class="secnum">27.2.1.1.1</span> IfAbruptRejectPromise ( <var>value</var>, <var>capability</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promisereaction-records" title="PromiseReaction Records"><span class="secnum">27.2.1.2</span> PromiseReaction Records</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createresolvingfunctions" title="CreateResolvingFunctions ( toResolve )"><span class="secnum">27.2.1.3</span> CreateResolvingFunctions ( <var>toResolve</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-fulfillpromise" title="FulfillPromise ( promise, value )"><span class="secnum">27.2.1.4</span> FulfillPromise ( <var>promise</var>, <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromisecapability" title="NewPromiseCapability ( C )"><span class="secnum">27.2.1.5</span> NewPromiseCapability ( <var>C</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-ispromise" title="IsPromise ( x )"><span class="secnum">27.2.1.6</span> IsPromise ( <var>x</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-rejectpromise" title="RejectPromise ( promise, reason )"><span class="secnum">27.2.1.7</span> RejectPromise ( <var>promise</var>, <var>reason</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-triggerpromisereactions" title="TriggerPromiseReactions ( reactions, argument )"><span class="secnum">27.2.1.8</span> TriggerPromiseReactions ( <var>reactions</var>, <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-host-promise-rejection-tracker" title="HostPromiseRejectionTracker ( promise, operation )"><span class="secnum">27.2.1.9</span> HostPromiseRejectionTracker ( <var>promise</var>, <var>operation</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-jobs" title="Promise Jobs"><span class="secnum">27.2.2</span> Promise Jobs</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromisereactionjob" title="NewPromiseReactionJob ( reaction, argument )"><span class="secnum">27.2.2.1</span> NewPromiseReactionJob ( <var>reaction</var>, <var>argument</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-newpromiseresolvethenablejob" title="NewPromiseResolveThenableJob ( promiseToResolve, thenable, then )"><span class="secnum">27.2.2.2</span> NewPromiseResolveThenableJob ( <var>promiseToResolve</var>, <var>thenable</var>, <var>then</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise-constructor" title="The Promise Constructor"><span class="secnum">27.2.3</span> The Promise Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise-executor" title="Promise ( executor )"><span class="secnum">27.2.3.1</span> Promise ( <var>executor</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-promise-constructor" title="Properties of the Promise Constructor"><span class="secnum">27.2.4</span> Properties of the Promise Constructor</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.all" title="Promise.all ( iterable )"><span class="secnum">27.2.4.1</span> Promise.all ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-getpromiseresolve" title="GetPromiseResolve ( promiseConstructor )"><span class="secnum">27.2.4.1.1</span> GetPromiseResolve ( <var>promiseConstructor</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseall" title="PerformPromiseAll ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.1.2</span> PerformPromiseAll ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.allsettled" title="Promise.allSettled ( iterable )"><span class="secnum">27.2.4.2</span> Promise.allSettled ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseallsettled" title="PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.2.1</span> PerformPromiseAllSettled ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.any" title="Promise.any ( iterable )"><span class="secnum">27.2.4.3</span> Promise.any ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiseany" title="PerformPromiseAny ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.3.1</span> PerformPromiseAny ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype" title="Promise.prototype"><span class="secnum">27.2.4.4</span> Promise.prototype</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.race" title="Promise.race ( iterable )"><span class="secnum">27.2.4.5</span> Promise.race ( <var>iterable</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromiserace" title="PerformPromiseRace ( iteratorRecord, constructor, resultCapability, promiseResolve )"><span class="secnum">27.2.4.5.1</span> PerformPromiseRace ( <var>iteratorRecord</var>, <var>constructor</var>, <var>resultCapability</var>, <var>promiseResolve</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.reject" title="Promise.reject ( r )"><span class="secnum">27.2.4.6</span> Promise.reject ( <var>r</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.resolve" title="Promise.resolve ( x )"><span class="secnum">27.2.4.7</span> Promise.resolve ( <var>x</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise-resolve" title="PromiseResolve ( C, x )"><span class="secnum">27.2.4.7.1</span> PromiseResolve ( <var>C</var>, <var>x</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.try" title="Promise.try ( callback, ...args )"><span class="secnum">27.2.4.8</span> Promise.try ( <var>callback</var>, ...<var>args</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.withResolvers" title="Promise.withResolvers ( )"><span class="secnum">27.2.4.9</span> Promise.withResolvers ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-get-promise-%symbol.species%" title="get Promise [ %Symbol.species% ]"><span class="secnum">27.2.4.10</span> get Promise [ %Symbol.species% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-promise-prototype-object" title="Properties of the Promise Prototype Object"><span class="secnum">27.2.5</span> Properties of the Promise Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.catch" title="Promise.prototype.catch ( onRejected )"><span class="secnum">27.2.5.1</span> Promise.prototype.catch ( <var>onRejected</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.constructor" title="Promise.prototype.constructor"><span class="secnum">27.2.5.2</span> Promise.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype.finally" title="Promise.prototype.finally ( onFinally )"><span class="secnum">27.2.5.3</span> Promise.prototype.finally ( <var>onFinally</var> )</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-promise.prototype.then" title="Promise.prototype.then ( onFulfilled, onRejected )"><span class="secnum">27.2.5.4</span> Promise.prototype.then ( <var>onFulfilled</var>, <var>onRejected</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-performpromisethen" title="PerformPromiseThen ( promise, onFulfilled, onRejected [ , resultCapability ] )"><span class="secnum">27.2.5.4.1</span> PerformPromiseThen ( <var>promise</var>, <var>onFulfilled</var>, <var>onRejected</var> [ , <var>resultCapability</var> ] )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-promise.prototype-%symbol.tostringtag%" title="Promise.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.2.5.5</span> Promise.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-promise-instances" title="Properties of Promise Instances"><span class="secnum">27.2.6</span> Properties of Promise Instances</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-objects" title="GeneratorFunction Objects"><span class="secnum">27.3</span> GeneratorFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-constructor" title="The GeneratorFunction Constructor"><span class="secnum">27.3.1</span> The GeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction" title="GeneratorFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.3.1.1</span> GeneratorFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-constructor" title="Properties of the GeneratorFunction Constructor"><span class="secnum">27.3.2</span> Properties of the GeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype" title="GeneratorFunction.prototype"><span class="secnum">27.3.2.1</span> GeneratorFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-prototype-object" title="Properties of the GeneratorFunction Prototype Object"><span class="secnum">27.3.3</span> Properties of the GeneratorFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype.constructor" title="GeneratorFunction.prototype.constructor"><span class="secnum">27.3.3.1</span> GeneratorFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype.prototype" title="GeneratorFunction.prototype.prototype"><span class="secnum">27.3.3.2</span> GeneratorFunction.prototype.prototype</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction.prototype-%symbol.tostringtag%" title="GeneratorFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.3.3.3</span> GeneratorFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generatorfunction-instances" title="GeneratorFunction Instances"><span class="secnum">27.3.4</span> GeneratorFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-length" title="length"><span class="secnum">27.3.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-name" title="name"><span class="secnum">27.3.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorfunction-instances-prototype" title="prototype"><span class="secnum">27.3.4.3</span> prototype</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-objects" title="AsyncGeneratorFunction Objects"><span class="secnum">27.4</span> AsyncGeneratorFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-constructor" title="The AsyncGeneratorFunction Constructor"><span class="secnum">27.4.1</span> The AsyncGeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction" title="AsyncGeneratorFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.4.1.1</span> AsyncGeneratorFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction" title="Properties of the AsyncGeneratorFunction Constructor"><span class="secnum">27.4.2</span> Properties of the AsyncGeneratorFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype" title="AsyncGeneratorFunction.prototype"><span class="secnum">27.4.2.1</span> AsyncGeneratorFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction-prototype" title="Properties of the AsyncGeneratorFunction Prototype Object"><span class="secnum">27.4.3</span> Properties of the AsyncGeneratorFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-constructor" title="AsyncGeneratorFunction.prototype.constructor"><span class="secnum">27.4.3.1</span> AsyncGeneratorFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-prototype" title="AsyncGeneratorFunction.prototype.prototype"><span class="secnum">27.4.3.2</span> AsyncGeneratorFunction.prototype.prototype</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-prototype-%symbol.tostringtag%" title="AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.4.3.3</span> AsyncGeneratorFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instances" title="AsyncGeneratorFunction Instances"><span class="secnum">27.4.4</span> AsyncGeneratorFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-length" title="length"><span class="secnum">27.4.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-name" title="name"><span class="secnum">27.4.4.2</span> name</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorfunction-instance-prototype" title="prototype"><span class="secnum">27.4.4.3</span> prototype</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generator-objects" title="Generator Objects"><span class="secnum">27.5</span> Generator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-generator-prototype" title="The %GeneratorPrototype% Object"><span class="secnum">27.5.1</span> The %GeneratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.constructor" title="%GeneratorPrototype%.constructor"><span class="secnum">27.5.1.1</span> %GeneratorPrototype%.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.next" title="%GeneratorPrototype%.next ( value )"><span class="secnum">27.5.1.2</span> %GeneratorPrototype%.next ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.return" title="%GeneratorPrototype%.return ( value )"><span class="secnum">27.5.1.3</span> %GeneratorPrototype%.return ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype.throw" title="%GeneratorPrototype%.throw ( exception )"><span class="secnum">27.5.1.4</span> %GeneratorPrototype%.throw ( <var>exception</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generator.prototype-%symbol.tostringtag%" title="%GeneratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.5.1.5</span> %GeneratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-generator-instances" title="Properties of Generator Instances"><span class="secnum">27.5.2</span> Properties of Generator Instances</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-generator-abstract-operations" title="Generator Abstract Operations"><span class="secnum">27.5.3</span> Generator Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorstart" title="GeneratorStart ( generator, generatorBody )"><span class="secnum">27.5.3.1</span> GeneratorStart ( <var>generator</var>, <var>generatorBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorvalidate" title="GeneratorValidate ( generator, generatorBrand )"><span class="secnum">27.5.3.2</span> GeneratorValidate ( <var>generator</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorresume" title="GeneratorResume ( generator, value, generatorBrand )"><span class="secnum">27.5.3.3</span> GeneratorResume ( <var>generator</var>, <var>value</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatorresumeabrupt" title="GeneratorResumeAbrupt ( generator, abruptCompletion, generatorBrand )"><span class="secnum">27.5.3.4</span> GeneratorResumeAbrupt ( <var>generator</var>, <var>abruptCompletion</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-getgeneratorkind" title="GetGeneratorKind ( )"><span class="secnum">27.5.3.5</span> GetGeneratorKind ( )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-generatoryield" title="GeneratorYield ( iteratorResult )"><span class="secnum">27.5.3.6</span> GeneratorYield ( <var>iteratorResult</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-yield" title="Yield ( value )"><span class="secnum">27.5.3.7</span> Yield ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-createiteratorfromclosure" title="CreateIteratorFromClosure ( closure, generatorBrand, generatorPrototype [ , extraSlots ] )"><span class="secnum">27.5.3.8</span> CreateIteratorFromClosure ( <var>closure</var>, <var>generatorBrand</var>, <var>generatorPrototype</var> [ , <var>extraSlots</var> ] )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgenerator-objects" title="AsyncGenerator Objects"><span class="secnum">27.6</span> AsyncGenerator Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-prototype" title="The %AsyncGeneratorPrototype% Object"><span class="secnum">27.6.1</span> The %AsyncGeneratorPrototype% Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-constructor" title="%AsyncGeneratorPrototype%.constructor"><span class="secnum">27.6.1.1</span> %AsyncGeneratorPrototype%.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-next" title="%AsyncGeneratorPrototype%.next ( value )"><span class="secnum">27.6.1.2</span> %AsyncGeneratorPrototype%.next ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-return" title="%AsyncGeneratorPrototype%.return ( value )"><span class="secnum">27.6.1.3</span> %AsyncGeneratorPrototype%.return ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-throw" title="%AsyncGeneratorPrototype%.throw ( exception )"><span class="secnum">27.6.1.4</span> %AsyncGeneratorPrototype%.throw ( <var>exception</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgenerator-prototype-%symbol.tostringtag%" title="%AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]"><span class="secnum">27.6.1.5</span> %AsyncGeneratorPrototype% [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-intances" title="Properties of AsyncGenerator Instances"><span class="secnum">27.6.2</span> Properties of AsyncGenerator Instances</a></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-asyncgenerator-abstract-operations" title="AsyncGenerator Abstract Operations"><span class="secnum">27.6.3</span> AsyncGenerator Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorrequest-records" title="AsyncGeneratorRequest Records"><span class="secnum">27.6.3.1</span> AsyncGeneratorRequest Records</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorstart" title="AsyncGeneratorStart ( generator, generatorBody )"><span class="secnum">27.6.3.2</span> AsyncGeneratorStart ( <var>generator</var>, <var>generatorBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorvalidate" title="AsyncGeneratorValidate ( generator, generatorBrand )"><span class="secnum">27.6.3.3</span> AsyncGeneratorValidate ( <var>generator</var>, <var>generatorBrand</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorenqueue" title="AsyncGeneratorEnqueue ( generator, completion, promiseCapability )"><span class="secnum">27.6.3.4</span> AsyncGeneratorEnqueue ( <var>generator</var>, <var>completion</var>, <var>promiseCapability</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorcompletestep" title="AsyncGeneratorCompleteStep ( generator, completion, done [ , realm ] )"><span class="secnum">27.6.3.5</span> AsyncGeneratorCompleteStep ( <var>generator</var>, <var>completion</var>, <var>done</var> [ , <var>realm</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorresume" title="AsyncGeneratorResume ( generator, completion )"><span class="secnum">27.6.3.6</span> AsyncGeneratorResume ( <var>generator</var>, <var>completion</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorunwrapyieldresumption" title="AsyncGeneratorUnwrapYieldResumption ( resumptionValue )"><span class="secnum">27.6.3.7</span> AsyncGeneratorUnwrapYieldResumption ( <var>resumptionValue</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratoryield" title="AsyncGeneratorYield ( value )"><span class="secnum">27.6.3.8</span> AsyncGeneratorYield ( <var>value</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratorawaitreturn" title="AsyncGeneratorAwaitReturn ( generator )"><span class="secnum">27.6.3.9</span> AsyncGeneratorAwaitReturn ( <var>generator</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncgeneratordrainqueue" title="AsyncGeneratorDrainQueue ( generator )"><span class="secnum">27.6.3.10</span> AsyncGeneratorDrainQueue ( <var>generator</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-objects" title="AsyncFunction Objects"><span class="secnum">27.7</span> AsyncFunction Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-constructor" title="The AsyncFunction Constructor"><span class="secnum">27.7.1</span> The AsyncFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-constructor-arguments" title="AsyncFunction ( ...parameterArgs, bodyArg )"><span class="secnum">27.7.1.1</span> AsyncFunction ( ...<var>parameterArgs</var>, <var>bodyArg</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-constructor-properties" title="Properties of the AsyncFunction Constructor"><span class="secnum">27.7.2</span> Properties of the AsyncFunction Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-constructor-prototype" title="AsyncFunction.prototype"><span class="secnum">27.7.2.1</span> AsyncFunction.prototype</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-prototype-properties" title="Properties of the AsyncFunction Prototype Object"><span class="secnum">27.7.3</span> Properties of the AsyncFunction Prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-prototype-properties-constructor" title="AsyncFunction.prototype.constructor"><span class="secnum">27.7.3.1</span> AsyncFunction.prototype.constructor</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-prototype-%symbol.tostringtag%" title="AsyncFunction.prototype [ %Symbol.toStringTag% ]"><span class="secnum">27.7.3.2</span> AsyncFunction.prototype [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-function-instances" title="AsyncFunction Instances"><span class="secnum">27.7.4</span> AsyncFunction Instances</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-instances-length" title="length"><span class="secnum">27.7.4.1</span> length</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-function-instances-name" title="name"><span class="secnum">27.7.4.2</span> name</a></li></ol></li><li><span class="item-toggle">+</span><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations" title="Async Functions Abstract Operations"><span class="secnum">27.7.5</span> Async Functions Abstract Operations</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations-async-function-start" title="AsyncFunctionStart ( promiseCapability, asyncFunctionBody )"><span class="secnum">27.7.5.1</span> AsyncFunctionStart ( <var>promiseCapability</var>, <var>asyncFunctionBody</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#sec-asyncblockstart" title="AsyncBlockStart ( promiseCapability, asyncBody, asyncContext )"><span class="secnum">27.7.5.2</span> AsyncBlockStart ( <var>promiseCapability</var>, <var>asyncBody</var>, <var>asyncContext</var> )</a></li><li><span class="item-toggle-none"></span><a href="control-abstraction-objects.html#await" title="Await ( value )"><span class="secnum">27.7.5.3</span> Await ( <var>value</var> )</a></li></ol></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-reflection" title="Reflection"><span class="secnum">28</span> Reflection</a><ol class="toc"><li><span class="item-toggle">+</span><a href="reflection.html#sec-reflect-object" title="The Reflect Object"><span class="secnum">28.1</span> The Reflect Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.apply" title="Reflect.apply ( target, thisArgument, argumentsList )"><span class="secnum">28.1.1</span> Reflect.apply ( <var>target</var>, <var>thisArgument</var>, <var>argumentsList</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.construct" title="Reflect.construct ( target, argumentsList [ , newTarget ] )"><span class="secnum">28.1.2</span> Reflect.construct ( <var>target</var>, <var>argumentsList</var> [ , <var>newTarget</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.defineproperty" title="Reflect.defineProperty ( target, propertyKey, attributes )"><span class="secnum">28.1.3</span> Reflect.defineProperty ( <var>target</var>, <var>propertyKey</var>, <var>attributes</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.deleteproperty" title="Reflect.deleteProperty ( target, propertyKey )"><span class="secnum">28.1.4</span> Reflect.deleteProperty ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.get" title="Reflect.get ( target, propertyKey [ , receiver ] )"><span class="secnum">28.1.5</span> Reflect.get ( <var>target</var>, <var>propertyKey</var> [ , <var>receiver</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.getownpropertydescriptor" title="Reflect.getOwnPropertyDescriptor ( target, propertyKey )"><span class="secnum">28.1.6</span> Reflect.getOwnPropertyDescriptor ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.getprototypeof" title="Reflect.getPrototypeOf ( target )"><span class="secnum">28.1.7</span> Reflect.getPrototypeOf ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.has" title="Reflect.has ( target, propertyKey )"><span class="secnum">28.1.8</span> Reflect.has ( <var>target</var>, <var>propertyKey</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.isextensible" title="Reflect.isExtensible ( target )"><span class="secnum">28.1.9</span> Reflect.isExtensible ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.ownkeys" title="Reflect.ownKeys ( target )"><span class="secnum">28.1.10</span> Reflect.ownKeys ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.preventextensions" title="Reflect.preventExtensions ( target )"><span class="secnum">28.1.11</span> Reflect.preventExtensions ( <var>target</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.set" title="Reflect.set ( target, propertyKey, V [ , receiver ] )"><span class="secnum">28.1.12</span> Reflect.set ( <var>target</var>, <var>propertyKey</var>, <var>V</var> [ , <var>receiver</var> ] )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect.setprototypeof" title="Reflect.setPrototypeOf ( target, proto )"><span class="secnum">28.1.13</span> Reflect.setPrototypeOf ( <var>target</var>, <var>proto</var> )</a></li><li><span class="item-toggle-none"></span><a href="reflection.html#sec-reflect-%symbol.tostringtag%" title="Reflect [ %Symbol.toStringTag% ]"><span class="secnum">28.1.14</span> Reflect [ %Symbol.toStringTag% ]</a></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-proxy-objects" title="Proxy Objects"><span class="secnum">28.2</span> Proxy Objects</a><ol class="toc"><li><span class="item-toggle">+</span><a href="reflection.html#sec-proxy-constructor" title="The Proxy Constructor"><span class="secnum">28.2.1</span> The Proxy Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-proxy-target-handler" title="Proxy ( target, handler )"><span class="secnum">28.2.1.1</span> Proxy ( <var>target</var>, <var>handler</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-properties-of-the-proxy-constructor" title="Properties of the Proxy Constructor"><span class="secnum">28.2.2</span> Properties of the Proxy Constructor</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-proxy.revocable" title="Proxy.revocable ( target, handler )"><span class="secnum">28.2.2.1</span> Proxy.revocable ( <var>target</var>, <var>handler</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="reflection.html#sec-module-namespace-objects" title="Module Namespace Objects"><span class="secnum">28.3</span> Module Namespace Objects</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="reflection.html#sec-%symbol.tostringtag%" title="%Symbol.toStringTag%"><span class="secnum">28.3.1</span> %Symbol.toStringTag%</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-memory-model" title="Memory Model"><span class="secnum">29</span> Memory Model</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-memory-model-fundamentals" title="Memory Model Fundamentals"><span class="secnum">29.1</span> Memory Model Fundamentals</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-agent-event-records" title="Agent Events Records"><span class="secnum">29.2</span> Agent Events Records</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-chosen-value-records" title="Chosen Value Records"><span class="secnum">29.3</span> Chosen Value Records</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-candidate-executions" title="Candidate Executions"><span class="secnum">29.4</span> Candidate Executions</a></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-abstract-operations-for-the-memory-model" title="Abstract Operations for the Memory Model"><span class="secnum">29.5</span> Abstract Operations for the Memory Model</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-event-set" title="EventSet ( execution )"><span class="secnum">29.5.1</span> EventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-sharedatablockeventset" title="SharedDataBlockEventSet ( execution )"><span class="secnum">29.5.2</span> SharedDataBlockEventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-hosteventset" title="HostEventSet ( execution )"><span class="secnum">29.5.3</span> HostEventSet ( <var>execution</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-composewriteeventbytes" title="ComposeWriteEventBytes ( execution, byteIndex, Ws )"><span class="secnum">29.5.4</span> ComposeWriteEventBytes ( <var>execution</var>, <var>byteIndex</var>, <var>Ws</var> )</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valueofreadevent" title="ValueOfReadEvent ( execution, R )"><span class="secnum">29.5.5</span> ValueOfReadEvent ( <var>execution</var>, <var>R</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-relations-of-candidate-executions" title="Relations of Candidate Executions"><span class="secnum">29.6</span> Relations of Candidate Executions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-agent-order" title="is-agent-order-before"><span class="secnum">29.6.1</span> is-agent-order-before</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-reads-bytes-from" title="reads-bytes-from"><span class="secnum">29.6.2</span> reads-bytes-from</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-reads-from" title="reads-from"><span class="secnum">29.6.3</span> reads-from</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-host-synchronizes-with" title="host-synchronizes-with"><span class="secnum">29.6.4</span> host-synchronizes-with</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-synchronizes-with" title="synchronizes-with"><span class="secnum">29.6.5</span> synchronizes-with</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-happens-before" title="happens-before"><span class="secnum">29.6.6</span> happens-before</a></li></ol></li><li><span class="item-toggle">+</span><a href="memory-model.html#sec-properties-of-valid-executions" title="Properties of Valid Executions"><span class="secnum">29.7</span> Properties of Valid Executions</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valid-chosen-reads" title="Valid Chosen Reads"><span class="secnum">29.7.1</span> Valid Chosen Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-coherent-reads" title="Coherent Reads"><span class="secnum">29.7.2</span> Coherent Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-tear-free-aligned-reads" title="Tear Free Reads"><span class="secnum">29.7.3</span> Tear Free Reads</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-memory-order" title="Sequentially Consistent Atomics"><span class="secnum">29.7.4</span> Sequentially Consistent Atomics</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-valid-executions" title="Valid Executions"><span class="secnum">29.7.5</span> Valid Executions</a></li></ol></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-races" title="Races"><span class="secnum">29.8</span> Races</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-data-races" title="Data Races"><span class="secnum">29.9</span> Data Races</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-data-race-freedom" title="Data Race Freedom"><span class="secnum">29.10</span> Data Race Freedom</a></li><li><span class="item-toggle-none"></span><a href="memory-model.html#sec-shared-memory-guidelines" title="Shared Memory Guidelines"><span class="secnum">29.11</span> Shared Memory Guidelines</a></li></ol></li><li><span class="item-toggle">+</span><a href="grammar-summary.html#sec-grammar-summary" title="Grammar Summary"><span class="secnum">Annex A <span class="annex-kind">(informative)</span></span> Grammar Summary</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-lexical-grammar" title="Lexical Grammar"><span class="secnum">A.1</span> Lexical Grammar</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-expressions" title="Expressions"><span class="secnum">A.2</span> Expressions</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-statements" title="Statements"><span class="secnum">A.3</span> Statements</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-functions-and-classes" title="Functions and Classes"><span class="secnum">A.4</span> Functions and Classes</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-scripts-and-modules" title="Scripts and Modules"><span class="secnum">A.5</span> Scripts and Modules</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-number-conversions" title="Number Conversions"><span class="secnum">A.6</span> Number Conversions</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-time-zone-offset-string-format" title="Time Zone Offset String Format"><span class="secnum">A.7</span> Time Zone Offset String Format</a></li><li><span class="item-toggle-none"></span><a href="grammar-summary.html#sec-regular-expressions" title="Regular Expressions"><span class="secnum">A.8</span> Regular Expressions</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-ecmascript-features-for-web-browsers" title="Additional ECMAScript Features for Web Browsers"><span class="secnum">Annex B <span class="annex-kind">(normative)</span></span> Additional ECMAScript Features for Web Browsers</a><ol class="toc"><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-syntax" title="Additional Syntax"><span class="secnum">B.1</span> Additional Syntax</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-html-like-comments" title="HTML-like Comments"><span class="secnum">B.1.1</span> HTML-like Comments</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-regular-expressions-patterns" title="Regular Expressions Patterns"><span class="secnum">B.1.2</span> Regular Expressions Patterns</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-early-errors-annexb" title="Static Semantics: Early Errors"><span class="secnum">B.1.2.1</span> SS: Early Errors</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-countleftcapturingparens-annexb" title="Static Semantics: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore"><span class="secnum">B.1.2.2</span> SS: CountLeftCapturingParensWithin and CountLeftCapturingParensBefore</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-is-character-class-annexb" title="Static Semantics: IsCharacterClass"><span class="secnum">B.1.2.3</span> SS: IsCharacterClass</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-patterns-static-semantics-character-value-annexb" title="Static Semantics: CharacterValue"><span class="secnum">B.1.2.4</span> SS: CharacterValue</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compilesubpattern-annexb" title="Runtime Semantics: CompileSubpattern"><span class="secnum">B.1.2.5</span> RS: CompileSubpattern</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compileassertion-annexb" title="Runtime Semantics: CompileAssertion"><span class="secnum">B.1.2.6</span> RS: CompileAssertion</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compileatom-annexb" title="Runtime Semantics: CompileAtom"><span class="secnum">B.1.2.7</span> RS: CompileAtom</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-compiletocharset-annexb" title="Runtime Semantics: CompileToCharSet"><span class="secnum">B.1.2.8</span> RS: CompileToCharSet</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-runtime-semantics-characterrangeorunion-abstract-operation" title="CharacterRangeOrUnion ( rer, A, B )"><span class="secnum">B.1.2.8.1</span> CharacterRangeOrUnion ( <var>rer</var>, <var>A</var>, <var>B</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-parsepattern-annexb" title="Static Semantics: ParsePattern ( patternText, u, v )"><span class="secnum">B.1.2.9</span> SS: ParsePattern ( <var>patternText</var>, <var>u</var>, <var>v</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-built-in-properties" title="Additional Built-in Properties"><span class="secnum">B.2</span> Additional Built-in Properties</a><ol class="toc"><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-global-object" title="Additional Properties of the Global Object"><span class="secnum">B.2.1</span> Additional Properties of the Global Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-escape-string" title="escape ( string )"><span class="secnum">B.2.1.1</span> escape ( <var>string</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-unescape-string" title="unescape ( string )"><span class="secnum">B.2.1.2</span> unescape ( <var>string</var> )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-string.prototype-object" title="Additional Properties of the String.prototype Object"><span class="secnum">B.2.2</span> Additional Properties of the String.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.substr" title="String.prototype.substr ( start, length )"><span class="secnum">B.2.2.1</span> String.prototype.substr ( <var>start</var>, <var>length</var> )</a></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.anchor" title="String.prototype.anchor ( name )"><span class="secnum">B.2.2.2</span> String.prototype.anchor ( <var>name</var> )</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-createhtml" title="CreateHTML ( string, tag, attribute, value )"><span class="secnum">B.2.2.2.1</span> CreateHTML ( <var>string</var>, <var>tag</var>, <var>attribute</var>, <var>value</var> )</a></li></ol></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.big" title="String.prototype.big ( )"><span class="secnum">B.2.2.3</span> String.prototype.big ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.blink" title="String.prototype.blink ( )"><span class="secnum">B.2.2.4</span> String.prototype.blink ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.bold" title="String.prototype.bold ( )"><span class="secnum">B.2.2.5</span> String.prototype.bold ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fixed" title="String.prototype.fixed ( )"><span class="secnum">B.2.2.6</span> String.prototype.fixed ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fontcolor" title="String.prototype.fontcolor ( colour )"><span class="secnum">B.2.2.7</span> String.prototype.fontcolor ( <var>colour</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.fontsize" title="String.prototype.fontsize ( size )"><span class="secnum">B.2.2.8</span> String.prototype.fontsize ( <var>size</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.italics" title="String.prototype.italics ( )"><span class="secnum">B.2.2.9</span> String.prototype.italics ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.link" title="String.prototype.link ( url )"><span class="secnum">B.2.2.10</span> String.prototype.link ( <var>url</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.small" title="String.prototype.small ( )"><span class="secnum">B.2.2.11</span> String.prototype.small ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.strike" title="String.prototype.strike ( )"><span class="secnum">B.2.2.12</span> String.prototype.strike ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.sub" title="String.prototype.sub ( )"><span class="secnum">B.2.2.13</span> String.prototype.sub ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-string.prototype.sup" title="String.prototype.sup ( )"><span class="secnum">B.2.2.14</span> String.prototype.sup ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#String.prototype.trimleft" title="String.prototype.trimLeft ( )"><span class="secnum">B.2.2.15</span> String.prototype.trimLeft ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#String.prototype.trimright" title="String.prototype.trimRight ( )"><span class="secnum">B.2.2.16</span> String.prototype.trimRight ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-date.prototype-object" title="Additional Properties of the Date.prototype Object"><span class="secnum">B.2.3</span> Additional Properties of the Date.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.getyear" title="Date.prototype.getYear ( )"><span class="secnum">B.2.3.1</span> Date.prototype.getYear ( )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.setyear" title="Date.prototype.setYear ( year )"><span class="secnum">B.2.3.2</span> Date.prototype.setYear ( <var>year</var> )</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-date.prototype.togmtstring" title="Date.prototype.toGMTString ( )"><span class="secnum">B.2.3.3</span> Date.prototype.toGMTString ( )</a></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-additional-properties-of-the-regexp.prototype-object" title="Additional Properties of the RegExp.prototype Object"><span class="secnum">B.2.4</span> Additional Properties of the RegExp.prototype Object</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-regexp.prototype.compile" title="RegExp.prototype.compile ( pattern, flags )"><span class="secnum">B.2.4.1</span> RegExp.prototype.compile ( <var>pattern</var>, <var>flags</var> )</a></li></ol></li></ol></li><li><span class="item-toggle">+</span><a href="additional-ecmascript-features-for-web-browsers.html#sec-other-additional-features" title="Other Additional Features"><span class="secnum">B.3</span> Other Additional Features</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-labelled-function-declarations" title="Labelled Function Declarations"><span class="secnum">B.3.1</span> Labelled Function Declarations</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-block-level-function-declarations-web-legacy-compatibility-semantics" title="Block-Level Function Declarations Web Legacy Compatibility Semantics"><span class="secnum">B.3.2</span> Block-Level Function Declarations Web Legacy Compatibility Semantics</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-functiondeclarations-in-ifstatement-statement-clauses" title="FunctionDeclarations in IfStatement Statement Clauses"><span class="secnum">B.3.3</span> FunctionDeclarations in IfStatement Statement Clauses</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-variablestatements-in-catch-blocks" title="VariableStatements in Catch Blocks"><span class="secnum">B.3.4</span> VariableStatements in Catch Blocks</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-initializers-in-forin-statement-heads" title="Initializers in ForIn Statement Heads"><span class="secnum">B.3.5</span> Initializers in ForIn Statement Heads</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-IsHTMLDDA-internal-slot" title="The [[IsHTMLDDA]] Internal Slot"><span class="secnum">B.3.6</span> The <var class="field">[[IsHTMLDDA]]</var> Internal Slot</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-web-compat-host-make-job-callback" title="Non-default behaviour in HostMakeJobCallback"><span class="secnum">B.3.7</span> Non-default behaviour in HostMakeJobCallback</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-web-compat-host-ensure-can-add-private-field" title="Non-default behaviour in HostEnsureCanAddPrivateElement"><span class="secnum">B.3.8</span> Non-default behaviour in HostEnsureCanAddPrivateElement</a></li><li><span class="item-toggle-none"></span><a href="additional-ecmascript-features-for-web-browsers.html#sec-runtime-errors-for-function-call-assignment-targets" title="Runtime Errors for Function Call Assignment Targets"><span class="secnum">B.3.9</span> Runtime Errors for Function Call Assignment Targets</a></li></ol></li></ol></li><li><span class="item-toggle-none"></span><a href="strict-mode-of-ecmascript.html#sec-strict-mode-of-ecmascript" title="The Strict Mode of ECMAScript"><span class="secnum">Annex C <span class="annex-kind">(informative)</span></span> The Strict Mode of ECMAScript</a></li><li><span class="item-toggle">+</span><a href="host-layering-points.html#sec-host-layering-points" title="Host Layering Points"><span class="secnum">Annex D <span class="annex-kind">(informative)</span></span> Host Layering Points</a><ol class="toc"><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-hooks-summary" title="Host Hooks"><span class="secnum">D.1</span> Host Hooks</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-defined-fields-summary" title="Host-defined Fields"><span class="secnum">D.2</span> Host-defined Fields</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-defined-objects-summary" title="Host-defined Objects"><span class="secnum">D.3</span> Host-defined Objects</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-running-jobs" title="Running Jobs"><span class="secnum">D.4</span> Running Jobs</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-internal-methods-of-exotic-objects" title="Internal Methods of Exotic Objects"><span class="secnum">D.5</span> Internal Methods of Exotic Objects</a></li><li><span class="item-toggle-none"></span><a href="host-layering-points.html#sec-host-built-in-objects-and-methods" title="Built-in Objects and Methods"><span class="secnum">D.6</span> Built-in Objects and Methods</a></li></ol></li><li><span class="item-toggle-none"></span><a href="corrections-and-clarifications-in-ecmascript-2015-with-possible-compatibility-impact.html#sec-corrections-and-clarifications-in-ecmascript-2015-with-possible-compatibility-impact" title="Corrections and Clarifications in ECMAScript 2015 with Possible Compatibility Impact"><span class="secnum">Annex E <span class="annex-kind">(informative)</span></span> Corrections and Clarifications in ECMAScript 2015 with Possible Compatibility Impact</a></li><li><span class="item-toggle-none"></span><a href="additions-and-changes-that-introduce-incompatibilities-with-prior-editions.html#sec-additions-and-changes-that-introduce-incompatibilities-with-prior-editions" title="Additions and Changes That Introduce Incompatibilities with Prior Editions"><span class="secnum">Annex F <span class="annex-kind">(informative)</span></span> Additions and Changes That Introduce Incompatibilities with Prior Editions</a></li><li><span class="item-toggle-none"></span><a href="bibliography.html#sec-bibliography" title="Bibliography">Bibliography</a></li><li><span class="item-toggle-none"></span><a href="colophon.html#sec-colophon" title="Colophon">Colophon</a></li><li><span class="item-toggle-none"></span><a href="copyright-and-software-license.html#sec-copyright-and-software-license" title="Copyright &amp; Software License">Copyright &amp; Software License</a></li></ol></div></div>
<div id="menu-spacer" class="menu-spacer"></div>
<div id="menu-toggle"><svg xmlns="http://www.w3.org/2000/svg" style="width:100%; height:100%; stroke:currentColor" viewBox="0 0 120 120" width="54" height="54">
<title>Menu</title>
<path stroke-width="10" stroke-linecap="round" d="M30,60 h60 M30,30 m0,5 h60 M30,90 m0,-5 h60"></path>
</svg></div>
<div id="shortcuts-help">
<ul>
<li><span>Toggle shortcuts help</span><code>?</code></li>
<li><span>Toggle "can call user code" annotations</span><code>u</code></li>
<li><span>Navigate to/from multipage</span><code>m</code></li>
<li><span>Jump to search box</span><code>/</code></li>
<li><span>Toggle pinning of the current clause</span><code>p</code></li>
<li><span>Jump to the <i>n</i><sup>th</sup> pin</span><code>1-9</code></li>
<li><span>Jump to the 10<sup>th</sup> pin</span><code>0</code></li>
<li><span>Jump to the most recent link target</span><code>`</code></li>
</ul></div><div id='spec-container'><emu-clause id="sec-ecmascript-language-functions-and-classes">
<h1><span class="secnum">15</span> ECMAScript Language: Functions and Classes</h1>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Various ECMAScript language elements cause the creation of ECMAScript <emu-xref href="#function-object" id="_ref_7526"><a href="ecmascript-data-types-and-values.html#function-object">function objects</a></emu-xref> (<emu-xref href="#sec-ecmascript-function-objects" id="_ref_461"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects">10.2</a></emu-xref>). <emu-xref aoid="Evaluation" id="_ref_7527"><a href="syntax-directed-operations.html#sec-evaluation">Evaluation</a></emu-xref> of such functions starts with the execution of their <var class="field">[[Call]]</var> internal method (<emu-xref href="#sec-ecmascript-function-objects-call-thisargument-argumentslist" id="_ref_462"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ecmascript-function-objects-call-thisargument-argumentslist">10.2.1</a></emu-xref>).</p>
</div></emu-note>
<emu-clause id="sec-parameter-lists">
<h1><span class="secnum">15.1</span> Parameter Lists</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="UniqueFormalParameters" params="Yield, Await" id="prod-UniqueFormalParameters">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kat5sugn">
<emu-nt params="?Yield, ?Await" id="_ref_22107"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="FormalParameters" params="Yield, Await" id="prod-FormalParameters">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-L6HGhDG8">
<emu-gann>[empty]</emu-gann>
</emu-rhs>
<emu-rhs a="xs94btl2" id="prod-gUzIea_C">
<emu-nt params="?Yield, ?Await" id="_ref_22108"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="5f3rxyqw">
<emu-nt params="?Yield, ?Await" id="_ref_22109"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="wdsulm_w">
<emu-nt params="?Yield, ?Await" id="_ref_22110"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
</emu-rhs>
<emu-rhs a="yh9ahvuw" id="prod-aTWifksv">
<emu-nt params="?Yield, ?Await" id="_ref_22111"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22112"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="FormalParameterList" params="Yield, Await" id="prod-FormalParameterList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3qhu-4tu" id="prod-NNXqGrU3">
<emu-nt params="?Yield, ?Await" id="_ref_22113"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="mlncfkxh" id="prod-7NFUmaIc">
<emu-nt params="?Yield, ?Await" id="_ref_22114"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>,</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22115"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="FunctionRestParameter" params="Yield, Await" id="prod-FunctionRestParameter">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iw2hthb9">
<emu-nt params="?Yield, ?Await" id="_ref_22116"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestElement">BindingRestElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="FormalParameter" params="Yield, Await" id="prod-FormalParameter">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xpmoewcq" id="prod-H68ZoagN">
<emu-nt params="?Yield, ?Await" id="_ref_22117"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-parameter-lists-static-semantics-early-errors">
<h1><span class="secnum">15.1.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="UniqueFormalParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ahjg9bb6"><emu-nt id="_ref_22118"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="BoundNames" id="_ref_7528"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22119"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> contains any duplicate elements.
</li>
</ul>
<emu-grammar><emu-production name="FormalParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mupdqnts"><emu-nt id="_ref_22120"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="IsSimpleParameterList" id="_ref_7529"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22121"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> is <emu-val>false</emu-val> and the <emu-xref aoid="BoundNames" id="_ref_7530"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22122"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> contains any duplicate elements.
</li>
</ul>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Multiple occurrences of the same <emu-nt id="_ref_22123"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in a <emu-nt id="_ref_22124"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> is only allowed for functions which have simple parameter lists and which are not defined in <emu-xref href="#sec-strict-mode-code" id="_ref_7531"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-static-semantics-containsexpression" oldids="sec-destructuring-binding-patterns-static-semantics-containsexpression,sec-function-definitions-static-semantics-containsexpression,sec-arrow-function-definitions-static-semantics-containsexpression,sec-async-arrow-function-definitions-static-semantics-ContainsExpression" type="sdo" aoid="ContainsExpression"><span id="sec-async-arrow-function-definitions-static-semantics-ContainsExpression"></span><span id="sec-arrow-function-definitions-static-semantics-containsexpression"></span><span id="sec-function-definitions-static-semantics-containsexpression"></span><span id="sec-destructuring-binding-patterns-static-semantics-containsexpression"></span>
<h1><span class="secnum">15.1.2</span> Static Semantics: ContainsExpression</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7532"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ContainsExpression takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ObjectBindingPattern">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ObjectBindingPattern">ObjectBindingPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-zkT2lhLy">
<emu-t>{</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="etffxusy" id="prod-6b4rrD_8">
<emu-t>{</emu-t>
<emu-nt id="_ref_22125"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestProperty">BindingRestProperty</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ObjectBindingPattern" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ObjectBindingPattern">ObjectBindingPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ullzxsua" id="prod-wtzT9EiN">
<emu-t>{</emu-t>
<emu-nt id="_ref_22126"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPropertyList">BindingPropertyList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22127"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestProperty">BindingRestProperty</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7533"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22128"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPropertyList">BindingPropertyList</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayBindingPattern" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ArrayBindingPattern">ArrayBindingPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kg5ha7xc" id="prod-h16qYz6B">
<emu-t>[</emu-t>
<emu-nt optional="" id="_ref_22129"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayBindingPattern" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ArrayBindingPattern">ArrayBindingPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dev8fspa" id="prod-1FzGu7Lp">
<emu-t>[</emu-t>
<emu-nt optional="" id="_ref_22130"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_22131"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestElement">BindingRestElement</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7534"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22132"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestElement">BindingRestElement</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayBindingPattern" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ArrayBindingPattern">ArrayBindingPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jxqgfqnk" id="prod-rkwjGbA6">
<emu-t>[</emu-t>
<emu-nt id="_ref_22133"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElementList">BindingElementList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_22134"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7535"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22135"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElementList">BindingElementList</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrayBindingPattern" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ArrayBindingPattern">ArrayBindingPattern</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7lkdseap" id="prod-J6x8FZJI">
<emu-t>[</emu-t>
<emu-nt id="_ref_22136"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElementList">BindingElementList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt optional="" id="_ref_22137"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_22138"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestElement">BindingRestElement</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-xref aoid="ContainsExpression" id="_ref_7536"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22139"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElementList">BindingElementList</a></emu-nt>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7537"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22140"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestElement">BindingRestElement</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingPropertyList" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPropertyList">BindingPropertyList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bzdeo9zt" id="prod-OZ7bBYfO">
<emu-nt id="_ref_22141"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPropertyList">BindingPropertyList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22142"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingProperty">BindingProperty</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-xref aoid="ContainsExpression" id="_ref_7538"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22143"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPropertyList">BindingPropertyList</a></emu-nt>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7539"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22144"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingProperty">BindingProperty</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingElementList" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElementList">BindingElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hiwampap" id="prod-Pbu7NeJV">
<emu-nt id="_ref_22145"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElementList">BindingElementList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22146"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElisionElement">BindingElisionElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-xref aoid="ContainsExpression" id="_ref_7540"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22147"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElementList">BindingElementList</a></emu-nt>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7541"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22148"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElisionElement">BindingElisionElement</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingElisionElement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElisionElement">BindingElisionElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="wo9nasvo" id="prod-l7kFOPKe">
<emu-nt optional="" id="_ref_22149"><a href="ecmascript-language-expressions.html#prod-Elision">Elision</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_22150"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7542"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22151"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingProperty" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingProperty">BindingProperty</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mhvrwluk" id="prod-eeXd9umu">
<emu-nt id="_ref_22152"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt>
<emu-t>:</emu-t>
<emu-nt id="_ref_22153"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-xref aoid="IsComputedPropertyKey" id="_ref_7543"><a href="ecmascript-language-expressions.html#sec-static-semantics-iscomputedpropertykey">IsComputedPropertyKey</a></emu-xref> of <emu-nt id="_ref_22154"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7544"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22155"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingElement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd1t5ekf" id="prod-1LlZEk6k">
<emu-nt id="_ref_22156"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a></emu-nt>
<emu-nt id="_ref_22157"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SingleNameBinding" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-SingleNameBinding">SingleNameBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-4G21hRBK"><emu-nt id="_ref_22158"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SingleNameBinding" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-SingleNameBinding">SingleNameBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ib7lg1vi" id="prod-8U9yuoPy">
<emu-nt id="_ref_22159"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-nt id="_ref_22160"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingRestElement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestElement">BindingRestElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ffhe3nqa" id="prod-NXTQAWlJ">
<emu-t>...</emu-t>
<emu-nt id="_ref_22161"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingRestElement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingRestElement">BindingRestElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hmjzlo6g" id="prod-TzoSXJM8">
<emu-t>...</emu-t>
<emu-nt id="_ref_22162"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7545"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22163"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-i4esWmfn"><emu-gann>[empty]</emu-gann></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uqeba6gz" id="prod-ffwfOKFy">
<emu-nt id="_ref_22164"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22165"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-xref aoid="ContainsExpression" id="_ref_7546"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22166"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7547"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22167"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameterList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ijrjejbs" id="prod-Z488vACK">
<emu-nt id="_ref_22168"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22169"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-xref aoid="ContainsExpression" id="_ref_7548"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22170"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7549"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <emu-nt id="_ref_22171"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrowParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-4Zv7nEzD"><emu-nt id="_ref_22172"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrowParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrb110hm" id="prod-l6d_kFqp"><emu-nt id="_ref_22173"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>formals</var> be the <emu-nt id="_ref_22174"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFormalParameters">ArrowFormalParameters</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_7550"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_22175"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt>.</li><li>Return <emu-xref aoid="ContainsExpression" id="_ref_7551"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsexpression">ContainsExpression</a></emu-xref> of <var>formals</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncArrowBindingIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-gFcfnGJu"><emu-nt id="_ref_22176"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-issimpleparameterlist" oldids="sec-destructuring-binding-patterns-static-semantics-issimpleparameterlist,sec-function-definitions-static-semantics-issimpleparameterlist,sec-arrow-function-definitions-static-semantics-issimpleparameterlist,sec-async-arrow-function-definitions-static-semantics-IsSimpleParameterList" type="sdo" aoid="IsSimpleParameterList"><span id="sec-async-arrow-function-definitions-static-semantics-IsSimpleParameterList"></span><span id="sec-arrow-function-definitions-static-semantics-issimpleparameterlist"></span><span id="sec-function-definitions-static-semantics-issimpleparameterlist"></span><span id="sec-destructuring-binding-patterns-static-semantics-issimpleparameterlist"></span>
<h1><span class="secnum">15.1.3</span> Static Semantics: IsSimpleParameterList</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7552"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> IsSimpleParameterList takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="BindingElement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mdrfyhm6" id="prod-iu5DldfN"><emu-nt id="_ref_22177"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingElement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd1t5ekf" id="prod-qrNno2ET">
<emu-nt id="_ref_22178"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a></emu-nt>
<emu-nt id="_ref_22179"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SingleNameBinding" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-SingleNameBinding">SingleNameBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-0qUANoiw"><emu-nt id="_ref_22180"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SingleNameBinding" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-SingleNameBinding">SingleNameBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ib7lg1vi" id="prod-b6-qn4pg">
<emu-nt id="_ref_22181"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-nt id="_ref_22182"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-tfjykC09"><emu-gann>[empty]</emu-gann></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dnjnbote" id="prod-3o8iyoDi"><emu-nt id="_ref_22183"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uqeba6gz" id="prod-90MekD57">
<emu-nt id="_ref_22184"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22185"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameterList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ijrjejbs" id="prod-CdQEr4_m">
<emu-nt id="_ref_22186"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22187"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-xref aoid="IsSimpleParameterList" id="_ref_7553"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22188"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>Return <emu-xref aoid="IsSimpleParameterList" id="_ref_7554"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22189"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameter" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="azzrmst0" id="prod-uFFTeOPE"><emu-nt id="_ref_22190"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="IsSimpleParameterList" id="_ref_7555"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22191"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrowParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-suhNtUzj"><emu-nt id="_ref_22192"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrowParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrb110hm" id="prod-46y1StQq"><emu-nt id="_ref_22193"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>formals</var> be the <emu-nt id="_ref_22194"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFormalParameters">ArrowFormalParameters</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_7556"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_22195"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt>.</li><li>Return <emu-xref aoid="IsSimpleParameterList" id="_ref_7557"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <var>formals</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncArrowBindingIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-qGPu4-Bq"><emu-nt id="_ref_22196"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="CoverCallExpressionAndAsyncArrowHead" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vks-z6n3" id="prod-bCpQszCG">
<emu-nt id="_ref_22197"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-nt id="_ref_22198"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>head</var> be the <emu-nt id="_ref_22199"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowHead">AsyncArrowHead</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_7558"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_22200"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>.</li><li>Return <emu-xref aoid="IsSimpleParameterList" id="_ref_7559"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <var>head</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-hasinitializer" oldids="sec-destructuring-binding-patterns-static-semantics-hasinitializer,sec-function-definitions-static-semantics-hasinitializer" type="sdo" aoid="HasInitializer"><span id="sec-function-definitions-static-semantics-hasinitializer"></span><span id="sec-destructuring-binding-patterns-static-semantics-hasinitializer"></span>
<h1><span class="secnum">15.1.4</span> Static Semantics: HasInitializer</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7560"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> HasInitializer takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="BindingElement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mdrfyhm6" id="prod-HBo05lrR"><emu-nt id="_ref_22201"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="BindingElement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-BindingElement">BindingElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dd1t5ekf" id="prod-3n6oU9Uv">
<emu-nt id="_ref_22202"><a href="ecmascript-language-statements-and-declarations.html#prod-BindingPattern">BindingPattern</a></emu-nt>
<emu-nt id="_ref_22203"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SingleNameBinding" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-SingleNameBinding">SingleNameBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-Qjr24iGe"><emu-nt id="_ref_22204"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SingleNameBinding" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-SingleNameBinding">SingleNameBinding</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ib7lg1vi" id="prod-6kCXjXJH">
<emu-nt id="_ref_22205"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-nt id="_ref_22206"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameterList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ijrjejbs" id="prod-YlncCUel">
<emu-nt id="_ref_22207"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22208"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-xref aoid="HasInitializer" id="_ref_7561"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer">HasInitializer</a></emu-xref> of <emu-nt id="_ref_22209"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="HasInitializer" id="_ref_7562"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer">HasInitializer</a></emu-xref> of <emu-nt id="_ref_22210"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-expectedargumentcount" oldids="sec-function-definitions-static-semantics-expectedargumentcount,sec-arrow-function-definitions-static-semantics-expectedargumentcount,sec-method-definitions-static-semantics-expectedargumentcount,sec-async-arrow-function-definitions-static-semantics-ExpectedArgumentCount" type="sdo" aoid="ExpectedArgumentCount"><span id="sec-async-arrow-function-definitions-static-semantics-ExpectedArgumentCount"></span><span id="sec-method-definitions-static-semantics-expectedargumentcount"></span><span id="sec-arrow-function-definitions-static-semantics-expectedargumentcount"></span><span id="sec-function-definitions-static-semantics-expectedargumentcount"></span>
<h1><span class="secnum">15.1.5</span> Static Semantics: ExpectedArgumentCount</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7563"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ExpectedArgumentCount takes no arguments and returns a non-negative <emu-xref href="#integer" id="_ref_7564"><a href="notational-conventions.html#integer">integer</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="FormalParameters">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-eE6gHDad">
<emu-gann>[empty]</emu-gann>
</emu-rhs>
<emu-rhs a="dnjnbote" id="prod-wqRyU6iR">
<emu-nt id="_ref_22211"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return 0.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uqeba6gz" id="prod--tdGBtde">
<emu-nt id="_ref_22212"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22213"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionRestParameter">FunctionRestParameter</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="ExpectedArgumentCount" id="_ref_7565"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-expectedargumentcount">ExpectedArgumentCount</a></emu-xref> of <emu-nt id="_ref_22214"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The ExpectedArgumentCount of a <emu-nt id="_ref_22215"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> is the number of <emu-nt id="_ref_22216"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> to the left of either the rest parameter or the first <emu-nt id="_ref_22217"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt> with an Initializer. A <emu-nt id="_ref_22218"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt> without an initializer is allowed after the first parameter with an initializer but such parameters are considered to be optional with <emu-val>undefined</emu-val> as their default value.</p>
</div></emu-note>
<emu-grammar><emu-production name="FormalParameterList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sxlu9ab0" id="prod-WmFS8bja"><emu-nt id="_ref_22219"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-xref aoid="HasInitializer" id="_ref_7566"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer">HasInitializer</a></emu-xref> of <emu-nt id="_ref_22220"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt> is <emu-val>true</emu-val>, return 0.</li><li>Return 1.</li></ol></emu-alg>
<emu-grammar><emu-production name="FormalParameterList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ijrjejbs" id="prod-2HGoRaSl">
<emu-nt id="_ref_22221"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_22222"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>count</var> be the <emu-xref aoid="ExpectedArgumentCount" id="_ref_7567"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-expectedargumentcount">ExpectedArgumentCount</a></emu-xref> of <emu-nt id="_ref_22223"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt>.</li><li>If <emu-xref aoid="HasInitializer" id="_ref_7568"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer">HasInitializer</a></emu-xref> of <emu-nt id="_ref_22224"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameterList">FormalParameterList</a></emu-nt> is <emu-val>true</emu-val> or <emu-xref aoid="HasInitializer" id="_ref_7569"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer">HasInitializer</a></emu-xref> of <emu-nt id="_ref_22225"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt> is <emu-val>true</emu-val>, return <var>count</var>.</li><li>Return <var>count</var> + 1.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrowParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-u-Q5LrzT"><emu-nt id="_ref_22226"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return 1.</li></ol></emu-alg>
<emu-grammar><emu-production name="ArrowParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrb110hm" id="prod-2fYMCaig"><emu-nt id="_ref_22227"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>formals</var> be the <emu-nt id="_ref_22228"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFormalParameters">ArrowFormalParameters</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_7570"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_22229"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt>.</li><li>Return the <emu-xref aoid="ExpectedArgumentCount" id="_ref_7571"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-expectedargumentcount">ExpectedArgumentCount</a></emu-xref> of <var>formals</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="PropertySetParameterList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sxlu9ab0" id="prod-01YV1lrL"><emu-nt id="_ref_22230"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-xref aoid="HasInitializer" id="_ref_7572"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasinitializer">HasInitializer</a></emu-xref> of <emu-nt id="_ref_22231"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a></emu-nt> is <emu-val>true</emu-val>, return 0.</li><li>Return 1.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncArrowBindingIdentifier" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uolyom43" id="prod-df9_W4vY"><emu-nt id="_ref_22232"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return 1.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-function-definitions">
<h1><span class="secnum">15.2</span> Function Definitions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="FunctionDeclaration" params="Yield, Await, Default" id="prod-FunctionDeclaration">
<emu-nt params="Yield, Await, Default"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a><emu-mods><emu-params>[Yield, Await, Default]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fal2s0ab" id="prod-lEQdX6hk">
<emu-t>function</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22233"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22234"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22235"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="_ww4ynxp" constraints="+Default" id="prod-eqpHaG0r"><emu-constraints>[+Default]</emu-constraints>
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22236"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22237"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="FunctionExpression" id="prod-FunctionExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="h6r9zk3c" id="prod--zvLR38c">
<emu-t>function</emu-t>
<emu-nt params="~Yield, ~Await" optional="" id="_ref_22238"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22239"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22240"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="FunctionBody" params="Yield, Await" id="prod-FunctionBody">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gljyayfs" id="prod-CKMymB_i">
<emu-nt params="?Yield, ?Await" id="_ref_22241"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="FunctionStatementList" params="Yield, Await" id="prod-FunctionStatementList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ime6-pzo" id="prod-WeOYFNsx">
<emu-nt params="?Yield, ?Await, +Return" optional="" id="_ref_22242"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a><emu-mods><emu-params>[?Yield, ?Await, +Return]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-function-definitions-static-semantics-early-errors">
<h1><span class="secnum">15.2.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="FunctionDeclaration">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gxoavzvy">
<emu-t>function</emu-t>
<emu-nt id="_ref_22243"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22244"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22245"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="smus6qca">
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22246"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22247"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="FunctionExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="g3mtfiqq">
<emu-t>function</emu-t>
<emu-nt optional="" id="_ref_22248"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22249"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22250"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
If <emu-xref aoid="IsStrict" id="_ref_7573"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<emu-nt id="_ref_22251"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>) is <emu-val>true</emu-val>, the Early Error rules for <emu-grammar><emu-production name="UniqueFormalParameters" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ahjg9bb6"><emu-nt id="_ref_22252"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar> are applied.
</li>
<li>
If <emu-nt id="_ref_22253"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> is present and <emu-xref aoid="IsStrict" id="_ref_7574"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<emu-nt id="_ref_22254"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>) is <emu-val>true</emu-val>, it is a Syntax Error if the <emu-xref aoid="StringValue" id="_ref_7575"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22255"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> is either <emu-val>"eval"</emu-val> or <emu-val>"arguments"</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_7576"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22256"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_7577"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22257"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> is <emu-val>false</emu-val>.
</li>
<li>
It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_7578"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22258"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7579"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22259"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22260"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7580"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22261"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22262"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7581"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22263"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22264"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7582"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22265"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22266"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7583"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22267"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.
</li>
</ul>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7584"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of a <emu-nt id="_ref_22268"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> does not include identifiers bound using var or function declarations.</p>
</div></emu-note>
<emu-grammar><emu-production name="FunctionBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xn8an8nx"><emu-nt id="_ref_22269"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7585"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22270"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt> contains any duplicate entries.
</li>
<li>
It is a Syntax Error if any element of the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7586"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22271"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt> also occurs in the <emu-xref aoid="VarDeclaredNames" id="_ref_7587"><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames">VarDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22272"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="ContainsDuplicateLabels" id="_ref_7588"><a href="syntax-directed-operations.html#sec-static-semantics-containsduplicatelabels">ContainsDuplicateLabels</a></emu-xref> of <emu-nt id="_ref_22273"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt> with argument « » is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="ContainsUndefinedBreakTarget" id="_ref_7589"><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedbreaktarget">ContainsUndefinedBreakTarget</a></emu-xref> of <emu-nt id="_ref_22274"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt> with argument « » is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="ContainsUndefinedContinueTarget" id="_ref_7590"><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedcontinuetarget">ContainsUndefinedContinueTarget</a></emu-xref> of <emu-nt id="_ref_22275"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt> with arguments « » and « » is <emu-val>true</emu-val>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-static-semantics-functionbodycontainsusestrict" oldids="sec-function-definitions-static-semantics-containsusestrict" type="sdo" aoid="FunctionBodyContainsUseStrict"><span id="sec-function-definitions-static-semantics-containsusestrict"></span>
<h1><span class="secnum">15.2.2</span> Static Semantics: FunctionBodyContainsUseStrict</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7591"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> FunctionBodyContainsUseStrict takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="FunctionBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xn8an8nx" id="prod-SI3y-Fh-"><emu-nt id="_ref_22276"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If the <emu-xref href="#directive-prologue" id="_ref_7592"><a href="ecmascript-language-source-code.html#directive-prologue">Directive Prologue</a></emu-xref> of <emu-nt id="_ref_22277"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> contains a <emu-xref href="#use-strict-directive" id="_ref_7593"><a href="ecmascript-language-source-code.html#use-strict-directive">Use Strict Directive</a></emu-xref>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-evaluatefunctionbody" oldids="sec-function-definitions-runtime-semantics-evaluatebody" type="sdo" aoid="EvaluateFunctionBody"><span id="sec-function-definitions-runtime-semantics-evaluatebody"></span>
<h1><span class="secnum">15.2.3</span> Runtime Semantics: EvaluateFunctionBody</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7594"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> EvaluateFunctionBody takes arguments <var>functionObject</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_7595"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_7596"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-ecmascript-language-types" id="_ref_7597"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7598"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7599"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="FunctionBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xn8an8nx" id="prod-BiHevouZ"><emu-nt id="_ref_22278"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_7600"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" class="e-user-code">FunctionDeclarationInstantiation</a></emu-xref>(<var>functionObject</var>, <var>argumentsList</var>).</li><li>Perform ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7601"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22279"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt>.</li><li>NOTE: If the previous step resulted in a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7602"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion</a></emu-xref>, then evaluation finished by proceeding past the end of the <emu-nt id="_ref_22280"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt>.</li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_7603"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiateordinaryfunctionobject" oldids="sec-function-definitions-runtime-semantics-instantiatefunctionobject" type="sdo" aoid="InstantiateOrdinaryFunctionObject"><span id="sec-function-definitions-runtime-semantics-instantiatefunctionobject"></span>
<h1><span class="secnum">15.2.4</span> Runtime Semantics: InstantiateOrdinaryFunctionObject</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7604"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateOrdinaryFunctionObject takes arguments <var>env</var> (an <emu-xref href="#sec-environment-records" id="_ref_7605"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>) and <var>privateEnv</var> (a <emu-xref href="#privateenvironment-record" id="_ref_7606"><a href="executable-code-and-execution-contexts.html#privateenvironment-record">PrivateEnvironment Record</a></emu-xref> or <emu-val>null</emu-val>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_7607"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="FunctionDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gxoavzvy" id="prod-oT86BVb2">
<emu-t>function</emu-t>
<emu-nt id="_ref_22281"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22282"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22283"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>name</var> be the <emu-xref aoid="StringValue" id="_ref_7608"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22284"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7609"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22285"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7610"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_7611"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22286"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22287"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7612"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <var>name</var>).</li><li>Perform <emu-xref aoid="MakeConstructor" id="_ref_7613"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor">MakeConstructor</a></emu-xref>(<var>F</var>).</li><li>Return <var>F</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FunctionDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="smus6qca" id="prod-TjR6TGOd">
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22288"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22289"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7614"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22290"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7615"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_7616"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22291"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22292"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7617"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <emu-val>"default"</emu-val>).</li><li>Perform <emu-xref aoid="MakeConstructor" id="_ref_7618"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor">MakeConstructor</a></emu-xref>(<var>F</var>).</li><li>Return <var>F</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>An anonymous <emu-nt id="_ref_22293"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> can only occur as part of an <code>export default</code> declaration, and its function code is therefore always <emu-xref href="#sec-strict-mode-code" id="_ref_7619"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiateordinaryfunctionexpression" type="sdo" aoid="InstantiateOrdinaryFunctionExpression">
<h1><span class="secnum">15.2.5</span> Runtime Semantics: InstantiateOrdinaryFunctionExpression</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7620"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateOrdinaryFunctionExpression takes optional argument <var>name</var> (a <emu-xref href="#property-key" id="_ref_7621"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or a <emu-xref href="#sec-private-names" id="_ref_7622"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_7623"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="FunctionExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="smus6qca" id="prod-M2Odxhb_">
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22294"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22295"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>name</var> is not present, set <var>name</var> to <emu-val>""</emu-val>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_7624"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7625"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7626"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22296"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7627"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_7628"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22297"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22298"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7629"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Perform <emu-xref aoid="MakeConstructor" id="_ref_7630"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor">MakeConstructor</a></emu-xref>(<var>closure</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FunctionExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gxoavzvy" id="prod-ZT_oXgSx">
<emu-t>function</emu-t>
<emu-nt id="_ref_22299"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22300"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22301"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_7631"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>name</var> is not present.</li><li>Set <var>name</var> to the <emu-xref aoid="StringValue" id="_ref_7632"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22302"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>outerEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7633"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>funcEnv</var> be <emu-xref aoid="NewDeclarativeEnvironment" id="_ref_7634"><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a></emu-xref>(<var>outerEnv</var>).</li><li>Perform !&nbsp;<var>funcEnv</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_7635"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>name</var>, <emu-val>false</emu-val>).</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7636"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7637"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22303"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7638"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_7639"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22304"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22305"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>funcEnv</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7640"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Perform <emu-xref aoid="MakeConstructor" id="_ref_7641"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor">MakeConstructor</a></emu-xref>(<var>closure</var>).</li><li>Perform !&nbsp;<var>funcEnv</var>.<emu-xref aoid="InitializeBinding" id="_ref_7642"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>name</var>, <var>closure</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The <emu-nt id="_ref_22306"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in a <emu-nt id="_ref_22307"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt> can be referenced from inside the <emu-nt id="_ref_22308"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>'s <emu-nt id="_ref_22309"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> to allow the function to call itself recursively. However, unlike in a <emu-nt id="_ref_22310"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>, the <emu-nt id="_ref_22311"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in a <emu-nt id="_ref_22312"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt> cannot be referenced from and does not affect the scope enclosing the <emu-nt id="_ref_22313"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-function-definitions-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">15.2.6</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="FunctionDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gxoavzvy" id="prod-JkNCEml2">
<emu-t>function</emu-t>
<emu-nt id="_ref_22314"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22315"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22316"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>An alternative semantics is provided by <emu-xref href="#sec-block-level-function-declarations-web-legacy-compatibility-semantics" title="" id="_ref_463"><a href="additional-ecmascript-features-for-web-browsers.html#sec-block-level-function-declarations-web-legacy-compatibility-semantics">Block-Level Function Declarations Web Legacy Compatibility Semantics</a></emu-xref> at step <emu-xref href="#step-functiondeclarationinstantiation-alt-funcdecl-eval" id="_ref_464"><a href="ordinary-and-exotic-objects-behaviours.html#step-functiondeclarationinstantiation-alt-funcdecl-eval">32.a.i.2.c</a></emu-xref> of <emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_7643"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation">FunctionDeclarationInstantiation</a></emu-xref>, step <emu-xref href="#step-globaldeclarationinstantiation-alt-funcdecl-eval" id="_ref_465"><a href="ecmascript-language-scripts-and-modules.html#step-globaldeclarationinstantiation-alt-funcdecl-eval">12.b.ii.2.a.ii.iii</a></emu-xref> of <emu-xref aoid="GlobalDeclarationInstantiation" id="_ref_7644"><a href="ecmascript-language-scripts-and-modules.html#sec-globaldeclarationinstantiation">GlobalDeclarationInstantiation</a></emu-xref>, and step <emu-xref href="#step-evaldeclarationinstantiation-alt-funcdecl-eval" id="_ref_466"><a href="global-object.html#step-evaldeclarationinstantiation-alt-funcdecl-eval">13.b.ii.7.b</a></emu-xref> of <emu-xref aoid="EvalDeclarationInstantiation" id="_ref_7645"><a href="global-object.html#sec-evaldeclarationinstantiation">EvalDeclarationInstantiation</a></emu-xref>.</p>
</div></emu-note>
<emu-grammar><emu-production name="FunctionDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="smus6qca" id="prod-JB2pB6KU">
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22317"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22318"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FunctionExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="g3mtfiqq" id="prod-gx42gzY4">
<emu-t>function</emu-t>
<emu-nt optional="" id="_ref_22319"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22320"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22321"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="InstantiateOrdinaryFunctionExpression" id="_ref_7646"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateordinaryfunctionexpression">InstantiateOrdinaryFunctionExpression</a></emu-xref> of <emu-nt id="_ref_22322"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>.</li></ol></emu-alg>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>A <emu-val>"prototype"</emu-val> property is automatically created for every function defined using a <emu-nt id="_ref_22323"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> or <emu-nt id="_ref_22324"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>, to allow for the possibility that the function will be used as a <emu-xref href="#constructor" id="_ref_7647"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref>.</p>
</div></emu-note>
<emu-grammar><emu-production name="FunctionStatementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-TAJ7Z-Ln"><emu-gann>[empty]</emu-gann></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>undefined</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-arrow-function-definitions">
<h1><span class="secnum">15.3</span> Arrow Function Definitions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="ArrowFunction" params="In, Yield, Await" id="prod-ArrowFunction">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="c-igjs-g" id="prod-AtXUMYu3">
<emu-nt params="?Yield, ?Await" id="_ref_22325"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-gann>[no <emu-nt id="_ref_22326"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>=&gt;</emu-t>
<emu-nt params="?In" id="_ref_22327"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a><emu-mods><emu-params>[?In]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ArrowParameters" params="Yield, Await" id="prod-ArrowParameters">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ir-rfjfi" id="prod-7Fo_GcBM">
<emu-nt params="?Yield, ?Await" id="_ref_22328"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="parencover" id="prod-W9higncN">
<emu-nt params="?Yield, ?Await" id="_ref_22329"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ConciseBody" params="In" id="prod-ConciseBody">
<emu-nt params="In"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a><emu-mods><emu-params>[In]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eofx7fcb" id="prod-UOsd7muB">
<emu-gann>[lookahead ≠ <emu-t>{</emu-t>]</emu-gann>
<emu-nt params="?In, ~Await" id="_ref_22330"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a><emu-mods><emu-params>[?In, ~Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="b3uvs-pa" id="prod-c6cxJePv">
<emu-t>{</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22331"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="ExpressionBody" params="In, Await" id="prod-ExpressionBody">
<emu-nt params="In, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a><emu-mods><emu-params>[In, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ickgdpbs" id="prod-Eaqym5cf">
<emu-nt params="?In, ~Yield, ?Await" id="_ref_22332"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, ~Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<h2>Supplemental Syntax</h2>
<p>
When processing an instance of the production<br>
<emu-grammar><emu-production name="ArrowParameters" params="Yield, Await" collapsed="" class=" inline">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kcra71qq"><emu-nt params="?Yield, ?Await" id="_ref_22333"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt></emu-rhs>
</emu-production>
</emu-grammar><br>
the interpretation of <emu-nt id="_ref_22334"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt> is refined using the following grammar:
</p>
<emu-grammar type="definition"><emu-production name="ArrowFormalParameters" params="Yield, Await" id="prod-ArrowFormalParameters">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFormalParameters">ArrowFormalParameters</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="t1yas6ob">
<emu-t>(</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22335"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-arrow-function-definitions-static-semantics-early-errors">
<h1><span class="secnum">15.3.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="ArrowFunction" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ieeod2mi">
<emu-nt id="_ref_22336"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_22337"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-nt id="_ref_22338"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7648"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22339"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22340"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7649"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22341"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="ConciseBodyContainsUseStrict" id="_ref_7650"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-concisebodycontainsusestrict">ConciseBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22342"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_7651"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22343"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> is <emu-val>false</emu-val>.
</li>
<li>
It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_7652"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22344"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7653"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22345"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt>.
</li>
</ul>
<emu-grammar><emu-production name="ArrowParameters" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrb110hm"><emu-nt id="_ref_22346"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
<emu-nt id="_ref_22347"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt> <emu-xref href="#must-cover" id="_ref_7654"><a href="notational-conventions.html#must-cover">must cover</a></emu-xref> an <emu-nt id="_ref_22348"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFormalParameters">ArrowFormalParameters</a></emu-nt>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-static-semantics-concisebodycontainsusestrict" oldids="sec-arrow-function-definitions-static-semantics-containsusestrict" type="sdo" aoid="ConciseBodyContainsUseStrict"><span id="sec-arrow-function-definitions-static-semantics-containsusestrict"></span>
<h1><span class="secnum">15.3.2</span> Static Semantics: ConciseBodyContainsUseStrict</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7655"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ConciseBodyContainsUseStrict takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ConciseBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="39f4t7jo" id="prod-paSxtgKv"><emu-nt id="_ref_22349"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ConciseBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="aerabkqd" id="prod-72drK4Uu">
<emu-t>{</emu-t>
<emu-nt id="_ref_22350"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_7656"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22351"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-evaluateconcisebody" oldids="sec-arrow-function-definitions-runtime-semantics-evaluatebody" type="sdo" aoid="EvaluateConciseBody"><span id="sec-arrow-function-definitions-runtime-semantics-evaluatebody"></span>
<h1><span class="secnum">15.3.3</span> Runtime Semantics: EvaluateConciseBody</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7657"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> EvaluateConciseBody takes arguments <var>functionObject</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_7658"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_7659"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-ecmascript-language-types" id="_ref_7660"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7661"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7662"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ConciseBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="39f4t7jo" id="prod-WWzcef1e"><emu-nt id="_ref_22352"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_7663"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" class="e-user-code">FunctionDeclarationInstantiation</a></emu-xref>(<var>functionObject</var>, <var>argumentsList</var>).</li><li>Return ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7664"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22353"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiatearrowfunctionexpression" type="sdo" aoid="InstantiateArrowFunctionExpression">
<h1><span class="secnum">15.3.4</span> Runtime Semantics: InstantiateArrowFunctionExpression</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7665"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateArrowFunctionExpression takes optional argument <var>name</var> (a <emu-xref href="#property-key" id="_ref_7666"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or a <emu-xref href="#sec-private-names" id="_ref_7667"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_7668"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ArrowFunction" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ieeod2mi" id="prod-C8uAwDLj">
<emu-nt id="_ref_22354"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_22355"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>name</var> is not present, set <var>name</var> to <emu-val>""</emu-val>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_7669"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7670"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7671"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22356"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt>.</li><li id="step-arrowfunction-evaluation-functioncreate">Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7672"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_7673"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22357"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt>, <emu-nt id="_ref_22358"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt>, <emu-const>lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7674"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>An <emu-nt id="_ref_22359"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt> does not define local bindings for <code>arguments</code>, <code>super</code>, <code>this</code>, or <code>new.target</code>. Any reference to <code>arguments</code>, <code>super</code>, <code>this</code>, or <code>new.target</code> within an <emu-nt id="_ref_22360"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt> must resolve to a binding in a lexically enclosing environment. Typically this will be the Function Environment of an immediately enclosing function. Even though an <emu-nt id="_ref_22361"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt> may contain references to <code>super</code>, the <emu-xref href="#function-object" id="_ref_7675"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> created in step <emu-xref href="#step-arrowfunction-evaluation-functioncreate" id="_ref_467"><a href="ecmascript-language-functions-and-classes.html#step-arrowfunction-evaluation-functioncreate">5</a></emu-xref> is not made into a method by performing <emu-xref aoid="MakeMethod" id="_ref_7676"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>. An <emu-nt id="_ref_22362"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt> that references <code>super</code> is always contained within a non-<emu-nt id="_ref_22363"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt> and the necessary state to implement <code>super</code> is accessible via the <var>env</var> that is captured by the <emu-xref href="#function-object" id="_ref_7677"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> of the <emu-nt id="_ref_22364"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-arrow-function-definitions-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">15.3.5</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ArrowFunction" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ieeod2mi" id="prod-_r8vevEJ">
<emu-nt id="_ref_22365"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowParameters">ArrowParameters</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_22366"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="InstantiateArrowFunctionExpression" id="_ref_7678"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiatearrowfunctionexpression">InstantiateArrowFunctionExpression</a></emu-xref> of <emu-nt id="_ref_22367"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ExpressionBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1px9pijq" id="prod-K1YpROJJ"><emu-nt id="_ref_22368"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>exprRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7679"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22369"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>exprValue</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_7680"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>exprRef</var>).</li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_7681"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<var>exprValue</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-method-definitions">
<h1><span class="secnum">15.4</span> Method Definitions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="MethodDefinition" params="Yield, Await" id="prod-MethodDefinition">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="zqbkmnaz" id="prod-BMcTBp4V">
<emu-nt params="?Yield, ?Await" id="_ref_22370"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22371"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22372"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="uivm4t30" id="prod-p-hcBiIQ">
<emu-nt params="?Yield, ?Await" id="_ref_22373"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="l4rbqexd" id="prod-SD1i1opG">
<emu-nt params="?Yield, ?Await" id="_ref_22374"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="2nx0uygb" id="prod-y0j2wcW4">
<emu-nt params="?Yield, ?Await" id="_ref_22375"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="jjr3zjnj" id="prod-SnKN_cew">
<emu-t>get</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22376"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22377"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="lrypae2k" id="prod-nWs7csn9">
<emu-t>set</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22378"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22379"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt params="~Yield, ~Await" id="_ref_22380"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="PropertySetParameterList" id="prod-PropertySetParameterList">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="p0ls10ix" id="prod-KB8f5_em">
<emu-nt params="~Yield, ~Await" id="_ref_22381"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameter">FormalParameter</a><emu-mods><emu-params>[~Yield, ~Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-method-definitions-static-semantics-early-errors">
<h1><span class="secnum">15.4.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ayx1_q">
<emu-nt id="_ref_22382"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22383"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22384"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_7682"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22385"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_7683"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22386"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> is <emu-val>false</emu-val>.
</li>
<li>
It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_7684"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22387"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7685"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22388"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>.
</li>
</ul>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lbu40xzc">
<emu-t>set</emu-t>
<emu-nt id="_ref_22389"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22390"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22391"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="BoundNames" id="_ref_7686"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22392"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt> contains any duplicate elements.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_7687"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22393"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_7688"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22394"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt> is <emu-val>false</emu-val>.
</li>
<li>
It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_7689"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22395"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7690"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22396"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-static-semantics-hasdirectsuper" oldids="sec-method-definitions-static-semantics-hasdirectsuper,sec-generator-function-definitions-static-semantics-hasdirectsuper,sec-async-generator-function-definitions-static-semantics-hasdirectsuper,sec-async-function-definitions-static-semantics-HasDirectSuper" type="sdo" aoid="HasDirectSuper"><span id="sec-async-function-definitions-static-semantics-HasDirectSuper"></span><span id="sec-async-generator-function-definitions-static-semantics-hasdirectsuper"></span><span id="sec-generator-function-definitions-static-semantics-hasdirectsuper"></span><span id="sec-method-definitions-static-semantics-hasdirectsuper"></span>
<h1><span class="secnum">15.4.2</span> Static Semantics: HasDirectSuper</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7691"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> HasDirectSuper takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ayx1_q" id="prod-IjiMaa22">
<emu-nt id="_ref_22397"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22398"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22399"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_22400"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7692"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22401"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-nt id="_ref_22402"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7693"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22403"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s7vk7pda" id="prod-DQeOw0IT">
<emu-t>get</emu-t>
<emu-nt id="_ref_22404"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22405"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-nt id="_ref_22406"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7694"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22407"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lbu40xzc" id="prod-H05PoHaH">
<emu-t>set</emu-t>
<emu-nt id="_ref_22408"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22409"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22410"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_22411"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7695"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22412"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-nt id="_ref_22413"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7696"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22414"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="GeneratorMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e6yupcp1" id="prod-u4Tk9i08">
<emu-t>*</emu-t>
<emu-nt id="_ref_22415"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22416"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22417"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_22418"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7697"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22419"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-nt id="_ref_22420"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7698"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22421"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncGeneratorMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2edb8sar" id="prod-OGEtsTHJ">
<emu-t>async</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22422"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22423"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22424"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_22425"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7699"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22426"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-nt id="_ref_22427"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7700"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22428"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cfy3_9l8" id="prod-p8Pkhz62">
<emu-t>async</emu-t>
<emu-nt id="_ref_22429"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22430"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22431"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_22432"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7701"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22433"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-nt id="_ref_22434"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7702"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22435"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-specialmethod" type="sdo" aoid="SpecialMethod">
<h1><span class="secnum">15.4.3</span> Static Semantics: SpecialMethod</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7703"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> SpecialMethod takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ayx1_q" id="prod-pvkrotoO">
<emu-nt id="_ref_22436"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22437"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22438"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="MethodDefinition">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uv5zsffy" id="prod-rP4adc9Q">
<emu-nt id="_ref_22439"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a></emu-nt>
</emu-rhs>
<emu-rhs a="pbphxm47" id="prod-YxKa5Jjx">
<emu-nt id="_ref_22440"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a></emu-nt>
</emu-rhs>
<emu-rhs a="gbmuvro8" id="prod-0jHLXbe4">
<emu-nt id="_ref_22441"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a></emu-nt>
</emu-rhs>
<emu-rhs a="s7vk7pda" id="prod-wnqbOfrS">
<emu-t>get</emu-t>
<emu-nt id="_ref_22442"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22443"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="lbu40xzc" id="prod-9m8VG-FD">
<emu-t>set</emu-t>
<emu-nt id="_ref_22444"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22445"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22446"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-definemethod" type="sdo" aoid="DefineMethod">
<h1><span class="secnum">15.4.4</span> Runtime Semantics: DefineMethod</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7704"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> DefineMethod takes argument <var>object</var> (an Object) and optional argument <var>functionPrototype</var> (an Object) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7705"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_7706"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> with fields <var class="field">[[Key]]</var> (a <emu-xref href="#property-key" id="_ref_7707"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref>) and <var class="field">[[Closure]]</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_7708"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_7709"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ayx1_q" id="prod-VntM4j0E">
<emu-nt id="_ref_22447"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22448"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22449"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propKey</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7710"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22450"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li><li>Let <var>env</var> be the <emu-xref href="#running-execution-context" id="_ref_7711"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7712"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>If <var>functionPrototype</var> is present, then<ol><li>Let <var>prototype</var> be <var>functionPrototype</var>.</li></ol></li><li>Else,<ol><li>Let <var>prototype</var> be <emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_7713"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>.</li></ol></li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7714"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22451"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7715"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<var>prototype</var>, <var>sourceText</var>, <emu-nt id="_ref_22452"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>, <emu-nt id="_ref_22453"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="MakeMethod" id="_ref_7716"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>(<var>closure</var>, <var>object</var>).</li><li>Return the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_7717"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">Record</a></emu-xref> { <var class="field">[[Key]]</var>: <var>propKey</var>, <var class="field">[[Closure]]</var>: <var>closure</var>&nbsp;}.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-methoddefinitionevaluation" oldids="sec-method-definitions-runtime-semantics-propertydefinitionevaluation,sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation,sec-asyncgenerator-definitions-propertydefinitionevaluation,sec-async-function-definitions-PropertyDefinitionEvaluation" type="sdo" aoid="MethodDefinitionEvaluation"><span id="sec-async-function-definitions-PropertyDefinitionEvaluation"></span><span id="sec-asyncgenerator-definitions-propertydefinitionevaluation"></span><span id="sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation"></span><span id="sec-method-definitions-runtime-semantics-propertydefinitionevaluation"></span>
<h1><span class="secnum">15.4.5</span> Runtime Semantics: MethodDefinitionEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7718"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> MethodDefinitionEvaluation takes arguments <var>object</var> (an Object) and <var>enumerable</var> (a Boolean) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7719"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-privateelement-specification-type" id="_ref_7720"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> or <emu-const>unused</emu-const>, or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_7721"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ayx1_q" id="prod-w_uDCOXP">
<emu-nt id="_ref_22454"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22455"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22456"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>methodDef</var> be ?&nbsp;<emu-xref aoid="DefineMethod" id="_ref_7722"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-definemethod" class="e-user-code">DefineMethod</a></emu-xref> of <emu-nt id="_ref_22457"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> with argument <var>object</var>.</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7723"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>methodDef</var>.<var class="field">[[Closure]]</var>, <var>methodDef</var>.<var class="field">[[Key]]</var>).</li><li>Return ?&nbsp;<emu-xref aoid="DefineMethodProperty" id="_ref_7724"><a href="ordinary-and-exotic-objects-behaviours.html#sec-definemethodproperty" class="e-user-code">DefineMethodProperty</a></emu-xref>(<var>object</var>, <var>methodDef</var>.<var class="field">[[Key]]</var>, <var>methodDef</var>.<var class="field">[[Closure]]</var>, <var>enumerable</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s7vk7pda" id="prod-JtMhObe9">
<emu-t>get</emu-t>
<emu-nt id="_ref_22458"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22459"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propKey</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7725"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22460"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li><li>Let <var>env</var> be the <emu-xref href="#running-execution-context" id="_ref_7726"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7727"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7728"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22461"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt>.</li><li>Let <var>formalParameterList</var> be an instance of the production <emu-grammar><emu-production name="FormalParameters" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb"><emu-gann>[empty]</emu-gann></emu-rhs>
</emu-production>
</emu-grammar>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7729"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_7730"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <var>formalParameterList</var>, <emu-nt id="_ref_22462"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="MakeMethod" id="_ref_7731"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>(<var>closure</var>, <var>object</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7732"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>propKey</var>, <emu-val>"get"</emu-val>).</li><li>If <var>propKey</var> is a <emu-xref href="#sec-private-names" id="_ref_7733"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>, then<ol><li>Return <emu-xref href="#sec-privateelement-specification-type" id="_ref_7734"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> { <var class="field">[[Key]]</var>: <var>propKey</var>, <var class="field">[[Kind]]</var>: <emu-const>accessor</emu-const>, <var class="field">[[Get]]</var>: <var>closure</var>, <var class="field">[[Set]]</var>: <emu-val>undefined</emu-val>&nbsp;}.</li></ol></li><li>Let <var>desc</var> be the PropertyDescriptor { <var class="field">[[Get]]</var>: <var>closure</var>, <var class="field">[[Enumerable]]</var>: <var>enumerable</var>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}.</li><li>Perform ?&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7735"><a href="abstract-operations.html#sec-definepropertyorthrow" class="e-user-code">DefinePropertyOrThrow</a></emu-xref>(<var>object</var>, <var>propKey</var>, <var>desc</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="MethodDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="lbu40xzc" id="prod-tr90svxc">
<emu-t>set</emu-t>
<emu-nt id="_ref_22463"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22464"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22465"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propKey</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7736"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22466"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li><li>Let <var>env</var> be the <emu-xref href="#running-execution-context" id="_ref_7737"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7738"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7739"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22467"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7740"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_7741"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22468"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt>, <emu-nt id="_ref_22469"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="MakeMethod" id="_ref_7742"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>(<var>closure</var>, <var>object</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7743"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>propKey</var>, <emu-val>"set"</emu-val>).</li><li>If <var>propKey</var> is a <emu-xref href="#sec-private-names" id="_ref_7744"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>, then<ol><li>Return <emu-xref href="#sec-privateelement-specification-type" id="_ref_7745"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> { <var class="field">[[Key]]</var>: <var>propKey</var>, <var class="field">[[Kind]]</var>: <emu-const>accessor</emu-const>, <var class="field">[[Get]]</var>: <emu-val>undefined</emu-val>, <var class="field">[[Set]]</var>: <var>closure</var>&nbsp;}.</li></ol></li><li>Let <var>desc</var> be the PropertyDescriptor { <var class="field">[[Set]]</var>: <var>closure</var>, <var class="field">[[Enumerable]]</var>: <var>enumerable</var>, <var class="field">[[Configurable]]</var>: <emu-val>true</emu-val>&nbsp;}.</li><li>Perform ?&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7746"><a href="abstract-operations.html#sec-definepropertyorthrow" class="e-user-code">DefinePropertyOrThrow</a></emu-xref>(<var>object</var>, <var>propKey</var>, <var>desc</var>).</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="GeneratorMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e6yupcp1" id="prod-qDk-XFAF">
<emu-t>*</emu-t>
<emu-nt id="_ref_22470"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22471"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22472"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propKey</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7747"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22473"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li><li>Let <var>env</var> be the <emu-xref href="#running-execution-context" id="_ref_7748"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7749"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7750"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22474"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7751"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-generatorfunction-prototype-object" id="_ref_7752"><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-prototype-object">%GeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22475"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>, <emu-nt id="_ref_22476"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="MakeMethod" id="_ref_7753"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>(<var>closure</var>, <var>object</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7754"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>propKey</var>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7755"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-generator-prototype" id="_ref_7756"><a href="control-abstraction-objects.html#sec-properties-of-generator-prototype">%GeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7757"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>closure</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return ?&nbsp;<emu-xref aoid="DefineMethodProperty" id="_ref_7758"><a href="ordinary-and-exotic-objects-behaviours.html#sec-definemethodproperty" class="e-user-code">DefineMethodProperty</a></emu-xref>(<var>object</var>, <var>propKey</var>, <var>closure</var>, <var>enumerable</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncGeneratorMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2edb8sar" id="prod-lPECR135">
<emu-t>async</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22477"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22478"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22479"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propKey</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7759"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22480"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li><li>Let <var>env</var> be the <emu-xref href="#running-execution-context" id="_ref_7760"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7761"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7762"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22481"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7763"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgeneratorfunction-prototype" id="_ref_7764"><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction-prototype">%AsyncGeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22482"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>, <emu-nt id="_ref_22483"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="MakeMethod" id="_ref_7765"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>(<var>closure</var>, <var>object</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7766"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>propKey</var>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7767"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgenerator-prototype" id="_ref_7768"><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-prototype">%AsyncGeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7769"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>closure</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return ?&nbsp;<emu-xref aoid="DefineMethodProperty" id="_ref_7770"><a href="ordinary-and-exotic-objects-behaviours.html#sec-definemethodproperty" class="e-user-code">DefineMethodProperty</a></emu-xref>(<var>object</var>, <var>propKey</var>, <var>closure</var>, <var>enumerable</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cfy3_9l8" id="prod-a75_jVUN">
<emu-t>async</emu-t>
<emu-nt id="_ref_22484"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22485"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22486"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propKey</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7771"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22487"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_7772"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7773"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7774"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22488"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7775"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-async-function-prototype-properties" id="_ref_7776"><a href="control-abstraction-objects.html#sec-async-function-prototype-properties">%AsyncFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22489"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>, <emu-nt id="_ref_22490"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="MakeMethod" id="_ref_7777"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>(<var>closure</var>, <var>object</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7778"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>propKey</var>).</li><li>Return ?&nbsp;<emu-xref aoid="DefineMethodProperty" id="_ref_7779"><a href="ordinary-and-exotic-objects-behaviours.html#sec-definemethodproperty" class="e-user-code">DefineMethodProperty</a></emu-xref>(<var>object</var>, <var>propKey</var>, <var>closure</var>, <var>enumerable</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-generator-function-definitions">
<h1><span class="secnum">15.5</span> Generator Function Definitions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="GeneratorDeclaration" params="Yield, Await, Default" id="prod-GeneratorDeclaration">
<emu-nt params="Yield, Await, Default"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a><emu-mods><emu-params>[Yield, Await, Default]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="56abocni" id="prod-oJNsRhfl">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22491"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="+Yield, ~Await" id="_ref_22492"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[+Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22493"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="gcxlonl8" constraints="+Default" id="prod-bWfHg6Xe"><emu-constraints>[+Default]</emu-constraints>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt params="+Yield, ~Await" id="_ref_22494"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[+Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22495"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="GeneratorExpression" id="prod-GeneratorExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="zsu4etlj" id="prod-haubt72j">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt params="+Yield, ~Await" optional="" id="_ref_22496"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[+Yield, ~Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="+Yield, ~Await" id="_ref_22497"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[+Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22498"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="GeneratorMethod" params="Yield, Await" id="prod-GeneratorMethod">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s6ntmoac" id="prod-8GV2khgE">
<emu-t>*</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22499"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="+Yield, ~Await" id="_ref_22500"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a><emu-mods><emu-params>[+Yield, ~Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22501"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="GeneratorBody" id="prod-GeneratorBody">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="quvqn30c" id="prod-PKmJj3Nf">
<emu-nt params="+Yield, ~Await" id="_ref_22502"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[+Yield, ~Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="YieldExpression" params="In, Await" id="prod-YieldExpression">
<emu-nt params="In, Await"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a><emu-mods><emu-params>[In, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8" id="prod-Ldhpu6QZ">
<emu-t>yield</emu-t>
</emu-rhs>
<emu-rhs a="alznzlpx" id="prod-eT7GKT7i">
<emu-t>yield</emu-t>
<emu-gann>[no <emu-nt id="_ref_22503"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-nt params="?In, +Yield, ?Await" id="_ref_22504"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, +Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="mrbi6v84" id="prod-iAdFfqlf">
<emu-t>yield</emu-t>
<emu-gann>[no <emu-nt id="_ref_22505"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>*</emu-t>
<emu-nt params="?In, +Yield, ?Await" id="_ref_22506"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a><emu-mods><emu-params>[?In, +Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p>The syntactic context immediately following <code>yield</code> requires use of the <emu-nt id="_ref_22507"><a href="ecmascript-language-lexical-grammar.html#prod-InputElementRegExpOrTemplateTail">InputElementRegExpOrTemplateTail</a></emu-nt> lexical goal.</p>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p><emu-nt id="_ref_22508"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> cannot be used within the <emu-nt id="_ref_22509"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> of a generator function because any expressions that are part of <emu-nt id="_ref_22510"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> are evaluated before the resulting Generator is in a resumable state.</p>
</div></emu-note>
<emu-note><span class="note">Note 3</span><div class="note-contents">
<p><emu-xref href="#sec-algorithm-conventions-abstract-operations" id="_ref_7780"><a href="notational-conventions.html#sec-algorithm-conventions-abstract-operations">Abstract operations</a></emu-xref> relating to Generators are defined in <emu-xref href="#sec-generator-abstract-operations" id="_ref_468"><a href="control-abstraction-objects.html#sec-generator-abstract-operations">27.5.3</a></emu-xref>.</p>
</div></emu-note>
<emu-clause id="sec-generator-function-definitions-static-semantics-early-errors">
<h1><span class="secnum">15.5.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="GeneratorMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e6yupcp1">
<emu-t>*</emu-t>
<emu-nt id="_ref_22511"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22512"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22513"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="HasDirectSuper" id="_ref_7781"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper">HasDirectSuper</a></emu-xref> of <emu-nt id="_ref_22514"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22515"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7782"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22516"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_7783"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22517"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_7784"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22518"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> is <emu-val>false</emu-val>.
</li>
<li>
It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_7785"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22519"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7786"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22520"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>.
</li>
</ul>
<emu-grammar><emu-production name="GeneratorDeclaration">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fbyztjbh">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22521"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22522"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22523"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="dsczygsq">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22524"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22525"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="GeneratorExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="32ghovyc">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt optional="" id="_ref_22526"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22527"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22528"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
If <emu-xref aoid="IsStrict" id="_ref_7787"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<emu-nt id="_ref_22529"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>) is <emu-val>true</emu-val>, the Early Error rules for <emu-grammar><emu-production name="UniqueFormalParameters" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ahjg9bb6"><emu-nt id="_ref_22530"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar> are applied.
</li>
<li>
If <emu-nt id="_ref_22531"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> is present and <emu-xref aoid="IsStrict" id="_ref_7788"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<emu-nt id="_ref_22532"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>) is <emu-val>true</emu-val>, it is a Syntax Error if the <emu-xref aoid="StringValue" id="_ref_7789"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22533"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> is either <emu-val>"eval"</emu-val> or <emu-val>"arguments"</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_7790"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22534"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_7791"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22535"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> is <emu-val>false</emu-val>.
</li>
<li>
It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_7792"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22536"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7793"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22537"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22538"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7794"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22539"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22540"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7795"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22541"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22542"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7796"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22543"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22544"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7797"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22545"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22546"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7798"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22547"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-runtime-semantics-evaluategeneratorbody" oldids="sec-generator-function-definitions-runtime-semantics-evaluatebody" type="sdo" aoid="EvaluateGeneratorBody"><span id="sec-generator-function-definitions-runtime-semantics-evaluatebody"></span>
<h1><span class="secnum">15.5.2</span> Runtime Semantics: EvaluateGeneratorBody</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7799"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> EvaluateGeneratorBody takes arguments <var>functionObject</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_7800"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_7801"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-ecmascript-language-types" id="_ref_7802"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7803"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7804"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="GeneratorBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqzbkm-h" id="prod-LwSgcEYg"><emu-nt id="_ref_22548"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_7805"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" class="e-user-code">FunctionDeclarationInstantiation</a></emu-xref>(<var>functionObject</var>, <var>argumentsList</var>).</li><li>Let <var>G</var> be ?&nbsp;<emu-xref aoid="OrdinaryCreateFromConstructor" id="_ref_7806"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycreatefromconstructor" class="e-user-code">OrdinaryCreateFromConstructor</a></emu-xref>(<var>functionObject</var>, <emu-val>"%GeneratorPrototype%"</emu-val>, « <var class="field">[[GeneratorState]]</var>, <var class="field">[[GeneratorContext]]</var>, <var class="field">[[GeneratorBrand]]</var>&nbsp;»).</li><li>Set <var>G</var>.<var class="field">[[GeneratorBrand]]</var> to <emu-const>empty</emu-const>.</li><li>Set <var>G</var>.<var class="field">[[GeneratorState]]</var> to <emu-const>suspended-start</emu-const>.</li><li>Perform <emu-xref aoid="GeneratorStart" id="_ref_7807"><a href="control-abstraction-objects.html#sec-generatorstart">GeneratorStart</a></emu-xref>(<var>G</var>, <emu-nt id="_ref_22549"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>).</li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_7808"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<var>G</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiategeneratorfunctionobject" oldids="sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject" type="sdo" aoid="InstantiateGeneratorFunctionObject"><span id="sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject"></span>
<h1><span class="secnum">15.5.3</span> Runtime Semantics: InstantiateGeneratorFunctionObject</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7809"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateGeneratorFunctionObject takes arguments <var>env</var> (an <emu-xref href="#sec-environment-records" id="_ref_7810"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>) and <var>privateEnv</var> (a <emu-xref href="#privateenvironment-record" id="_ref_7811"><a href="executable-code-and-execution-contexts.html#privateenvironment-record">PrivateEnvironment Record</a></emu-xref> or <emu-val>null</emu-val>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_7812"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="GeneratorDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fbyztjbh" id="prod-x_w-E_WI">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22550"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22551"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22552"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>name</var> be the <emu-xref aoid="StringValue" id="_ref_7813"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22553"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7814"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22554"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7815"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-generatorfunction-prototype-object" id="_ref_7816"><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-prototype-object">%GeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22555"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22556"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7817"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <var>name</var>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7818"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-generator-prototype" id="_ref_7819"><a href="control-abstraction-objects.html#sec-properties-of-generator-prototype">%GeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7820"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <var>F</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="GeneratorDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dsczygsq" id="prod-zyQVJwqE">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22557"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22558"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7821"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22559"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7822"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-generatorfunction-prototype-object" id="_ref_7823"><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-prototype-object">%GeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22560"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22561"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7824"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <emu-val>"default"</emu-val>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7825"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-generator-prototype" id="_ref_7826"><a href="control-abstraction-objects.html#sec-properties-of-generator-prototype">%GeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7827"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <var>F</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>An anonymous <emu-nt id="_ref_22562"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt> can only occur as part of an <code>export default</code> declaration, and its function code is therefore always <emu-xref href="#sec-strict-mode-code" id="_ref_7828"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiategeneratorfunctionexpression" type="sdo" aoid="InstantiateGeneratorFunctionExpression">
<h1><span class="secnum">15.5.4</span> Runtime Semantics: InstantiateGeneratorFunctionExpression</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7829"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateGeneratorFunctionExpression takes optional argument <var>name</var> (a <emu-xref href="#property-key" id="_ref_7830"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or a <emu-xref href="#sec-private-names" id="_ref_7831"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_7832"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="GeneratorExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dsczygsq" id="prod-FnOrbSnb">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22563"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22564"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>name</var> is not present, set <var>name</var> to <emu-val>""</emu-val>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_7833"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7834"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7835"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22565"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7836"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-generatorfunction-prototype-object" id="_ref_7837"><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-prototype-object">%GeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22566"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22567"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7838"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7839"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-generator-prototype" id="_ref_7840"><a href="control-abstraction-objects.html#sec-properties-of-generator-prototype">%GeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7841"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>closure</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="GeneratorExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fbyztjbh" id="prod-sxTe1ywL">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22568"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22569"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22570"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_7842"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>name</var> is not present.</li><li>Set <var>name</var> to the <emu-xref aoid="StringValue" id="_ref_7843"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22571"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>outerEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7844"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>funcEnv</var> be <emu-xref aoid="NewDeclarativeEnvironment" id="_ref_7845"><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a></emu-xref>(<var>outerEnv</var>).</li><li>Perform !&nbsp;<var>funcEnv</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_7846"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>name</var>, <emu-val>false</emu-val>).</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7847"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7848"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22572"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7849"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-generatorfunction-prototype-object" id="_ref_7850"><a href="control-abstraction-objects.html#sec-properties-of-the-generatorfunction-prototype-object">%GeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22573"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22574"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>funcEnv</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7851"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7852"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-generator-prototype" id="_ref_7853"><a href="control-abstraction-objects.html#sec-properties-of-generator-prototype">%GeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7854"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>closure</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Perform !&nbsp;<var>funcEnv</var>.<emu-xref aoid="InitializeBinding" id="_ref_7855"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>name</var>, <var>closure</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The <emu-nt id="_ref_22575"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in a <emu-nt id="_ref_22576"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt> can be referenced from inside the <emu-nt id="_ref_22577"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt>'s <emu-nt id="_ref_22578"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> to allow the generator code to call itself recursively. However, unlike in a <emu-nt id="_ref_22579"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt>, the <emu-nt id="_ref_22580"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in a <emu-nt id="_ref_22581"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt> cannot be referenced from and does not affect the scope enclosing the <emu-nt id="_ref_22582"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-generator-function-definitions-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">15.5.5</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="GeneratorExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="32ghovyc" id="prod-yHj7yISB">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt optional="" id="_ref_22583"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22584"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22585"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="InstantiateGeneratorFunctionExpression" id="_ref_7856"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiategeneratorfunctionexpression">InstantiateGeneratorFunctionExpression</a></emu-xref> of <emu-nt id="_ref_22586"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="YieldExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0d8zyjn8" id="prod-R-GDUsNW"><emu-t>yield</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="Yield" id="_ref_7857"><a href="control-abstraction-objects.html#sec-yield" class="e-user-code">Yield</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></emu-alg>
<emu-grammar><emu-production name="YieldExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="50ht6hl2" id="prod-WbSBzREt">
<emu-t>yield</emu-t>
<emu-nt id="_ref_22587"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>exprRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7858"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22588"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>value</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_7859"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>exprRef</var>).</li><li>Return ?&nbsp;<emu-xref aoid="Yield" id="_ref_7860"><a href="control-abstraction-objects.html#sec-yield" class="e-user-code">Yield</a></emu-xref>(<var>value</var>).</li></ol></emu-alg>
<emu-grammar><emu-production name="YieldExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="r6m4ewun" id="prod-gD5_zJlG">
<emu-t>yield</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22589"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>generatorKind</var> be <emu-xref aoid="GetGeneratorKind" id="_ref_7861"><a href="control-abstraction-objects.html#sec-getgeneratorkind">GetGeneratorKind</a></emu-xref>().</li><li><emu-xref href="#assert" id="_ref_7862"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>generatorKind</var> is either <emu-const>sync</emu-const> or <emu-const>async</emu-const>.</li><li>Let <var>exprRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_7863"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22590"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>.</li><li>Let <var>value</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_7864"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>exprRef</var>).</li><li>Let <var>iteratorRecord</var> be ?&nbsp;<emu-xref aoid="GetIterator" id="_ref_7865"><a href="abstract-operations.html#sec-getiterator" class="e-user-code">GetIterator</a></emu-xref>(<var>value</var>, <var>generatorKind</var>).</li><li>Let <var>iterator</var> be <var>iteratorRecord</var>.<var class="field">[[Iterator]]</var>.</li><li>Let <var>received</var> be <emu-xref aoid="NormalCompletion" id="_ref_7866"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li><li>Repeat,<ol><li>If <var>received</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7867"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion</a></emu-xref>, then<ol><li>Let <var>innerResult</var> be ?&nbsp;<emu-xref aoid="Call" id="_ref_7868"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>iteratorRecord</var>.<var class="field">[[NextMethod]]</var>, <var>iteratorRecord</var>.<var class="field">[[Iterator]]</var>, « <var>received</var>.<var class="field">[[Value]]</var>&nbsp;»).</li><li>If <var>generatorKind</var> is <emu-const>async</emu-const>, set <var>innerResult</var> to ?&nbsp;<emu-xref aoid="Await" id="_ref_7869"><a href="control-abstraction-objects.html#await" class="e-user-code">Await</a></emu-xref>(<var>innerResult</var>).</li><li>If <var>innerResult</var> <emu-xref href="#sec-object-type" id="_ref_7870"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>done</var> be ?&nbsp;<emu-xref aoid="IteratorComplete" id="_ref_7871"><a href="abstract-operations.html#sec-iteratorcomplete" class="e-user-code">IteratorComplete</a></emu-xref>(<var>innerResult</var>).</li><li>If <var>done</var> is <emu-val>true</emu-val>, then<ol><li>Return ?&nbsp;<emu-xref aoid="IteratorValue" id="_ref_7872"><a href="abstract-operations.html#sec-iteratorvalue" class="e-user-code">IteratorValue</a></emu-xref>(<var>innerResult</var>).</li></ol></li><li>If <var>generatorKind</var> is <emu-const>async</emu-const>, set <var>received</var> to <emu-xref aoid="Completion" id="_ref_7873"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="AsyncGeneratorYield" id="_ref_7874"><a href="control-abstraction-objects.html#sec-asyncgeneratoryield" class="e-user-code">AsyncGeneratorYield</a></emu-xref>(? <emu-xref aoid="IteratorValue" id="_ref_7875"><a href="abstract-operations.html#sec-iteratorvalue" class="e-user-code">IteratorValue</a></emu-xref>(<var>innerResult</var>))).</li><li>Else, set <var>received</var> to <emu-xref aoid="Completion" id="_ref_7876"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="GeneratorYield" id="_ref_7877"><a href="control-abstraction-objects.html#sec-generatoryield">GeneratorYield</a></emu-xref>(<var>innerResult</var>)).</li></ol></li><li>Else if <var>received</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7878"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>, then<ol><li>Let <var>throw</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_7879"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>iterator</var>, <emu-val>"throw"</emu-val>).</li><li>If <var>throw</var> is not <emu-val>undefined</emu-val>, then<ol><li>Let <var>innerResult</var> be ?&nbsp;<emu-xref aoid="Call" id="_ref_7880"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>throw</var>, <var>iterator</var>, « <var>received</var>.<var class="field">[[Value]]</var>&nbsp;»).</li><li>If <var>generatorKind</var> is <emu-const>async</emu-const>, set <var>innerResult</var> to ?&nbsp;<emu-xref aoid="Await" id="_ref_7881"><a href="control-abstraction-objects.html#await" class="e-user-code">Await</a></emu-xref>(<var>innerResult</var>).</li><li>NOTE: Exceptions from the inner <emu-xref href="#sec-iterator-interface" id="_ref_7882"><a href="control-abstraction-objects.html#sec-iterator-interface">iterator</a></emu-xref> <code>throw</code> method are propagated. <emu-xref href="#sec-completion-record-specification-type" id="_ref_7883"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">Normal completions</a></emu-xref> from an inner <code>throw</code> method are processed similarly to an inner <code>next</code>.</li><li>If <var>innerResult</var> <emu-xref href="#sec-object-type" id="_ref_7884"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>done</var> be ?&nbsp;<emu-xref aoid="IteratorComplete" id="_ref_7885"><a href="abstract-operations.html#sec-iteratorcomplete" class="e-user-code">IteratorComplete</a></emu-xref>(<var>innerResult</var>).</li><li>If <var>done</var> is <emu-val>true</emu-val>, then<ol><li>Return ?&nbsp;<emu-xref aoid="IteratorValue" id="_ref_7886"><a href="abstract-operations.html#sec-iteratorvalue" class="e-user-code">IteratorValue</a></emu-xref>(<var>innerResult</var>).</li></ol></li><li>If <var>generatorKind</var> is <emu-const>async</emu-const>, set <var>received</var> to <emu-xref aoid="Completion" id="_ref_7887"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="AsyncGeneratorYield" id="_ref_7888"><a href="control-abstraction-objects.html#sec-asyncgeneratoryield" class="e-user-code">AsyncGeneratorYield</a></emu-xref>(? <emu-xref aoid="IteratorValue" id="_ref_7889"><a href="abstract-operations.html#sec-iteratorvalue" class="e-user-code">IteratorValue</a></emu-xref>(<var>innerResult</var>))).</li><li>Else, set <var>received</var> to <emu-xref aoid="Completion" id="_ref_7890"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="GeneratorYield" id="_ref_7891"><a href="control-abstraction-objects.html#sec-generatoryield">GeneratorYield</a></emu-xref>(<var>innerResult</var>)).</li></ol></li><li>Else,<ol><li>NOTE: If <var>iterator</var> does not have a <code>throw</code> method, this throw is going to terminate the <code>yield*</code> loop. But first we need to give <var>iterator</var> a chance to clean up.</li><li>Let <var>closeCompletion</var> be <emu-xref aoid="NormalCompletion" id="_ref_7892"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<emu-const>empty</emu-const>).</li><li>If <var>generatorKind</var> is <emu-const>async</emu-const>, perform ?&nbsp;<emu-xref aoid="AsyncIteratorClose" id="_ref_7893"><a href="abstract-operations.html#sec-asynciteratorclose" class="e-user-code">AsyncIteratorClose</a></emu-xref>(<var>iteratorRecord</var>, <var>closeCompletion</var>).</li><li>Else, perform ?&nbsp;<emu-xref aoid="IteratorClose" id="_ref_7894"><a href="abstract-operations.html#sec-iteratorclose" class="e-user-code">IteratorClose</a></emu-xref>(<var>iteratorRecord</var>, <var>closeCompletion</var>).</li><li>NOTE: The next step throws a <emu-val>TypeError</emu-val> to indicate that there was a <code>yield*</code> protocol violation: <var>iterator</var> does not have a <code>throw</code> method.</li><li>Throw a <emu-val>TypeError</emu-val> exception.</li></ol></li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_7895"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>received</var> is a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7896"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref>.</li><li>Let <var>return</var> be ?&nbsp;<emu-xref aoid="GetMethod" id="_ref_7897"><a href="abstract-operations.html#sec-getmethod" class="e-user-code">GetMethod</a></emu-xref>(<var>iterator</var>, <emu-val>"return"</emu-val>).</li><li>If <var>return</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>receivedValue</var> be <var>received</var>.<var class="field">[[Value]]</var>.</li><li>If <var>generatorKind</var> is <emu-const>async</emu-const>, then<ol><li>Set <var>receivedValue</var> to ?&nbsp;<emu-xref aoid="Await" id="_ref_7898"><a href="control-abstraction-objects.html#await" class="e-user-code">Await</a></emu-xref>(<var>receivedValue</var>).</li></ol></li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_7899"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<var>receivedValue</var>).</li></ol></li><li>Let <var>innerReturnResult</var> be ?&nbsp;<emu-xref aoid="Call" id="_ref_7900"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>return</var>, <var>iterator</var>, « <var>received</var>.<var class="field">[[Value]]</var>&nbsp;»).</li><li>If <var>generatorKind</var> is <emu-const>async</emu-const>, set <var>innerReturnResult</var> to ?&nbsp;<emu-xref aoid="Await" id="_ref_7901"><a href="control-abstraction-objects.html#await" class="e-user-code">Await</a></emu-xref>(<var>innerReturnResult</var>).</li><li>If <var>innerReturnResult</var> <emu-xref href="#sec-object-type" id="_ref_7902"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>done</var> be ?&nbsp;<emu-xref aoid="IteratorComplete" id="_ref_7903"><a href="abstract-operations.html#sec-iteratorcomplete" class="e-user-code">IteratorComplete</a></emu-xref>(<var>innerReturnResult</var>).</li><li>If <var>done</var> is <emu-val>true</emu-val>, then<ol><li>Let <var>returnedValue</var> be ?&nbsp;<emu-xref aoid="IteratorValue" id="_ref_7904"><a href="abstract-operations.html#sec-iteratorvalue" class="e-user-code">IteratorValue</a></emu-xref>(<var>innerReturnResult</var>).</li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_7905"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<var>returnedValue</var>).</li></ol></li><li>If <var>generatorKind</var> is <emu-const>async</emu-const>, set <var>received</var> to <emu-xref aoid="Completion" id="_ref_7906"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="AsyncGeneratorYield" id="_ref_7907"><a href="control-abstraction-objects.html#sec-asyncgeneratoryield" class="e-user-code">AsyncGeneratorYield</a></emu-xref>(? <emu-xref aoid="IteratorValue" id="_ref_7908"><a href="abstract-operations.html#sec-iteratorvalue" class="e-user-code">IteratorValue</a></emu-xref>(<var>innerReturnResult</var>))).</li><li>Else, set <var>received</var> to <emu-xref aoid="Completion" id="_ref_7909"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="GeneratorYield" id="_ref_7910"><a href="control-abstraction-objects.html#sec-generatoryield">GeneratorYield</a></emu-xref>(<var>innerReturnResult</var>)).</li></ol></li></ol></li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-async-generator-function-definitions">
<h1><span class="secnum">15.6</span> Async Generator Function Definitions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="AsyncGeneratorDeclaration" params="Yield, Await, Default" id="prod-AsyncGeneratorDeclaration">
<emu-nt params="Yield, Await, Default"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a><emu-mods><emu-params>[Yield, Await, Default]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="vxevrvwx" id="prod-cOKIJmRw">
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_22591"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22592"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="+Yield, +Await" id="_ref_22593"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[+Yield, +Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22594"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="zdnckwse" constraints="+Default" id="prod-1L17zU6t"><emu-constraints>[+Default]</emu-constraints>
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_22595"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt params="+Yield, +Await" id="_ref_22596"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[+Yield, +Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22597"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncGeneratorExpression" id="prod-AsyncGeneratorExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yh0wbqjf" id="prod-s18yr2Ij">
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_22598"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt params="+Yield, +Await" optional="" id="_ref_22599"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[+Yield, +Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="+Yield, +Await" id="_ref_22600"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[+Yield, +Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22601"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncGeneratorMethod" params="Yield, Await" id="prod-AsyncGeneratorMethod">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bojlwy10" id="prod-ceV74b-L">
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_22602"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>*</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22603"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="+Yield, +Await" id="_ref_22604"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a><emu-mods><emu-params>[+Yield, +Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22605"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncGeneratorBody" id="prod-AsyncGeneratorBody">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="zqmkrekv" id="prod-9f9S8TE_">
<emu-nt params="+Yield, +Await" id="_ref_22606"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[+Yield, +Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p><emu-nt id="_ref_22607"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> and <emu-nt id="_ref_22608"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> cannot be used within the <emu-nt id="_ref_22609"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> of an async generator function because any expressions that are part of <emu-nt id="_ref_22610"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> are evaluated before the resulting AsyncGenerator is in a resumable state.</p>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p><emu-xref href="#sec-algorithm-conventions-abstract-operations" id="_ref_7911"><a href="notational-conventions.html#sec-algorithm-conventions-abstract-operations">Abstract operations</a></emu-xref> relating to AsyncGenerators are defined in <emu-xref href="#sec-asyncgenerator-abstract-operations" id="_ref_469"><a href="control-abstraction-objects.html#sec-asyncgenerator-abstract-operations">27.6.3</a></emu-xref>.</p>
</div></emu-note>
<emu-clause id="sec-async-generator-function-definitions-static-semantics-early-errors">
<h1><span class="secnum">15.6.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="AsyncGeneratorMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2edb8sar">
<emu-t>async</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22611"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22612"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22613"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>It is a Syntax Error if <emu-xref aoid="HasDirectSuper" id="_ref_7912"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper">HasDirectSuper</a></emu-xref> of <emu-nt id="_ref_22614"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22615"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7913"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22616"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22617"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7914"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22618"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_7915"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22619"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_7916"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22620"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> is <emu-val>false</emu-val>.</li>
<li>It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_7917"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22621"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7918"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22622"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>.</li>
</ul>
<emu-grammar><emu-production name="AsyncGeneratorDeclaration">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e9lmm5cj">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22623"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22624"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22625"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="xruu4gg0">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22626"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22627"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncGeneratorExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nplor0n0">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt optional="" id="_ref_22628"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22629"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22630"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>If <emu-xref aoid="IsStrict" id="_ref_7919"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<emu-nt id="_ref_22631"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>) is <emu-val>true</emu-val>, the Early Error rules for <emu-grammar><emu-production name="UniqueFormalParameters" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ahjg9bb6"><emu-nt id="_ref_22632"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar> are applied.</li>
<li>If <emu-nt id="_ref_22633"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> is present and <emu-xref aoid="IsStrict" id="_ref_7920"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<emu-nt id="_ref_22634"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>) is <emu-val>true</emu-val>, it is a Syntax Error if the <emu-xref aoid="StringValue" id="_ref_7921"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22635"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> is either <emu-val>"eval"</emu-val> or <emu-val>"arguments"</emu-val>.</li>
<li>It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_7922"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22636"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_7923"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22637"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> is <emu-val>false</emu-val>.</li>
<li>It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_7924"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22638"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_7925"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22639"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22640"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7926"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22641"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22642"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7927"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22643"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22644"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7928"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22645"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22646"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7929"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22647"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22648"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7930"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22649"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22650"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_7931"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22651"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.</li>
</ul>
</emu-clause>
<emu-clause id="sec-runtime-semantics-evaluateasyncgeneratorbody" oldids="sec-asyncgenerator-definitions-evaluatebody" type="sdo" aoid="EvaluateAsyncGeneratorBody"><span id="sec-asyncgenerator-definitions-evaluatebody"></span>
<h1><span class="secnum">15.6.2</span> Runtime Semantics: EvaluateAsyncGeneratorBody</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7932"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> EvaluateAsyncGeneratorBody takes arguments <var>functionObject</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_7933"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_7934"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-ecmascript-language-types" id="_ref_7935"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7936"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_7937"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncGeneratorBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqzbkm-h" id="prod-SWMcozzE"><emu-nt id="_ref_22652"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_7938"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" class="e-user-code">FunctionDeclarationInstantiation</a></emu-xref>(<var>functionObject</var>, <var>argumentsList</var>).</li><li>Let <var>generator</var> be ?&nbsp;<emu-xref aoid="OrdinaryCreateFromConstructor" id="_ref_7939"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycreatefromconstructor" class="e-user-code">OrdinaryCreateFromConstructor</a></emu-xref>(<var>functionObject</var>, <emu-val>"%AsyncGeneratorPrototype%"</emu-val>, « <var class="field">[[AsyncGeneratorState]]</var>, <var class="field">[[AsyncGeneratorContext]]</var>, <var class="field">[[AsyncGeneratorQueue]]</var>, <var class="field">[[GeneratorBrand]]</var>&nbsp;»).</li><li>Set <var>generator</var>.<var class="field">[[GeneratorBrand]]</var> to <emu-const>empty</emu-const>.</li><li>Set <var>generator</var>.<var class="field">[[AsyncGeneratorState]]</var> to <emu-const>suspended-start</emu-const>.</li><li>Perform <emu-xref aoid="AsyncGeneratorStart" id="_ref_7940"><a href="control-abstraction-objects.html#sec-asyncgeneratorstart">AsyncGeneratorStart</a></emu-xref>(<var>generator</var>, <emu-nt id="_ref_22653"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>).</li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_7941"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<var>generator</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiateasyncgeneratorfunctionobject" oldids="sec-asyncgenerator-definitions-instantiatefunctionobject" type="sdo" aoid="InstantiateAsyncGeneratorFunctionObject"><span id="sec-asyncgenerator-definitions-instantiatefunctionobject"></span>
<h1><span class="secnum">15.6.3</span> Runtime Semantics: InstantiateAsyncGeneratorFunctionObject</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7942"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateAsyncGeneratorFunctionObject takes arguments <var>env</var> (an <emu-xref href="#sec-environment-records" id="_ref_7943"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>) and <var>privateEnv</var> (a <emu-xref href="#privateenvironment-record" id="_ref_7944"><a href="executable-code-and-execution-contexts.html#privateenvironment-record">PrivateEnvironment Record</a></emu-xref> or <emu-val>null</emu-val>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_7945"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncGeneratorDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e9lmm5cj" id="prod-JvNVLw_7">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22654"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22655"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22656"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>name</var> be the <emu-xref aoid="StringValue" id="_ref_7946"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22657"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7947"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22658"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7948"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgeneratorfunction-prototype" id="_ref_7949"><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction-prototype">%AsyncGeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22659"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22660"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7950"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <var>name</var>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7951"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgenerator-prototype" id="_ref_7952"><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-prototype">%AsyncGeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7953"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <var>F</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncGeneratorDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xruu4gg0" id="prod-G-CKcSEp">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22661"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22662"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7954"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22663"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7955"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgeneratorfunction-prototype" id="_ref_7956"><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction-prototype">%AsyncGeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22664"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22665"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7957"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <emu-val>"default"</emu-val>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7958"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgenerator-prototype" id="_ref_7959"><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-prototype">%AsyncGeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7960"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>F</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <var>F</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>An anonymous <emu-nt id="_ref_22666"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt> can only occur as part of an <code>export default</code> declaration.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiateasyncgeneratorfunctionexpression" type="sdo" aoid="InstantiateAsyncGeneratorFunctionExpression">
<h1><span class="secnum">15.6.4</span> Runtime Semantics: InstantiateAsyncGeneratorFunctionExpression</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7961"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateAsyncGeneratorFunctionExpression takes optional argument <var>name</var> (a <emu-xref href="#property-key" id="_ref_7962"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or a <emu-xref href="#sec-private-names" id="_ref_7963"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_7964"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncGeneratorExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xruu4gg0" id="prod-A3m5kV04">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22667"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22668"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>name</var> is not present, set <var>name</var> to <emu-val>""</emu-val>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_7965"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7966"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7967"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22669"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7968"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgeneratorfunction-prototype" id="_ref_7969"><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction-prototype">%AsyncGeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22670"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22671"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7970"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7971"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgenerator-prototype" id="_ref_7972"><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-prototype">%AsyncGeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7973"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>closure</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncGeneratorExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e9lmm5cj" id="prod-7PTlQqLp">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22672"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22673"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22674"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_7974"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>name</var> is not present.</li><li>Set <var>name</var> to the <emu-xref aoid="StringValue" id="_ref_7975"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22675"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>outerEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7976"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>funcEnv</var> be <emu-xref aoid="NewDeclarativeEnvironment" id="_ref_7977"><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a></emu-xref>(<var>outerEnv</var>).</li><li>Perform !&nbsp;<var>funcEnv</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_7978"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>name</var>, <emu-val>false</emu-val>).</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_7979"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_7980"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22676"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_7981"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgeneratorfunction-prototype" id="_ref_7982"><a href="control-abstraction-objects.html#sec-properties-of-asyncgeneratorfunction-prototype">%AsyncGeneratorFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_22677"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_22678"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>funcEnv</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_7983"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Let <var>prototype</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_7984"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-asyncgenerator-prototype" id="_ref_7985"><a href="control-abstraction-objects.html#sec-properties-of-asyncgenerator-prototype">%AsyncGeneratorPrototype%</a></emu-xref>).</li><li>Perform !&nbsp;<emu-xref aoid="DefinePropertyOrThrow" id="_ref_7986"><a href="abstract-operations.html#sec-definepropertyorthrow">DefinePropertyOrThrow</a></emu-xref>(<var>closure</var>, <emu-val>"prototype"</emu-val>, PropertyDescriptor { <var class="field">[[Value]]</var>: <var>prototype</var>, <var class="field">[[Writable]]</var>: <emu-val>true</emu-val>, <var class="field">[[Enumerable]]</var>: <emu-val>false</emu-val>, <var class="field">[[Configurable]]</var>: <emu-val>false</emu-val>&nbsp;}).</li><li>Perform !&nbsp;<var>funcEnv</var>.<emu-xref aoid="InitializeBinding" id="_ref_7987"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>name</var>, <var>closure</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The <emu-nt id="_ref_22679"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in an <emu-nt id="_ref_22680"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt> can be referenced from inside the <emu-nt id="_ref_22681"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>'s <emu-nt id="_ref_22682"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt> to allow the generator code to call itself recursively. However, unlike in an <emu-nt id="_ref_22683"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt>, the <emu-nt id="_ref_22684"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in an <emu-nt id="_ref_22685"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt> cannot be referenced from and does not affect the scope enclosing the <emu-nt id="_ref_22686"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-asyncgenerator-definitions-evaluation" type="sdo">
<h1><span class="secnum">15.6.5</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="AsyncGeneratorExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nplor0n0" id="prod-RTtPBoTs">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt optional="" id="_ref_22687"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22688"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22689"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="InstantiateAsyncGeneratorFunctionExpression" id="_ref_7988"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncgeneratorfunctionexpression">InstantiateAsyncGeneratorFunctionExpression</a></emu-xref> of <emu-nt id="_ref_22690"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-class-definitions">
<h1><span class="secnum">15.7</span> Class Definitions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="ClassDeclaration" params="Yield, Await, Default" id="prod-ClassDeclaration">
<emu-nt params="Yield, Await, Default"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a><emu-mods><emu-params>[Yield, Await, Default]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="r-8ix7mw" id="prod-kd27yk51">
<emu-t>class</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22691"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_22692"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="eish3c1z" constraints="+Default" id="prod-bStNnwN_"><emu-constraints>[+Default]</emu-constraints>
<emu-t>class</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22693"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassExpression" params="Yield, Await" id="prod-ClassExpression">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ClassExpression">ClassExpression</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3vemrlhb" id="prod-Vthx67sj">
<emu-t>class</emu-t>
<emu-nt params="?Yield, ?Await" optional="" id="_ref_22694"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_22695"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassTail" params="Yield, Await" id="prod-ClassTail">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0tcpjpju" id="prod-mIr25y7h">
<emu-nt params="?Yield, ?Await" optional="" id="_ref_22696"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>{</emu-t>
<emu-nt params="?Yield, ?Await" optional="" id="_ref_22697"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="ClassHeritage" params="Yield, Await" id="prod-ClassHeritage">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="eyngn05c">
<emu-t>extends</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22698"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassBody" params="Yield, Await" id="prod-ClassBody">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hi6rf-a8" id="prod-VFbPG7Xd">
<emu-nt params="?Yield, ?Await" id="_ref_22699"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassElementList" params="Yield, Await" id="prod-ClassElementList">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="l7zmtagw" id="prod-haKPgLO7">
<emu-nt params="?Yield, ?Await" id="_ref_22700"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="ga1dtfdq" id="prod-sKhHHXFQ">
<emu-nt params="?Yield, ?Await" id="_ref_22701"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_22702"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassElement" params="Yield, Await" id="prod-ClassElement">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ke2_9p84" id="prod-NjP_487X">
<emu-nt params="?Yield, ?Await" id="_ref_22703"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="a0i06csv" id="prod-0XtyXojL">
<emu-t>static</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22704"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="guxzmt6t" id="prod-RVH9JhqU">
<emu-nt params="?Yield, ?Await" id="_ref_22705"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
<emu-rhs a="w56q4hpj" id="prod-8cGH1X5O">
<emu-t>static</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22706"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
<emu-rhs a="2ui-f2qn" id="prod-MThA5IaK">
<emu-nt id="_ref_22707"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlock">ClassStaticBlock</a></emu-nt>
</emu-rhs>
<emu-rhs a="sg2sawim" id="prod-40k8u1X0">
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="FieldDefinition" params="Yield, Await" id="prod-FieldDefinition">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tlc4azd3" id="prod-qdC94hXo">
<emu-nt params="?Yield, ?Await" id="_ref_22708"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="+In, ?Yield, ?Await" optional="" id="_ref_22709"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-params>[+In, ?Yield, ?Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassElementName" params="Yield, Await" id="prod-ClassElementName">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jbcjyldj" id="prod-KVWS267v">
<emu-nt params="?Yield, ?Await" id="_ref_22710"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="ie2-zc1c" id="prod-yD9JWieS">
<emu-nt id="_ref_22711"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassStaticBlock" id="prod-ClassStaticBlock">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlock">ClassStaticBlock</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hv6hopt7" id="prod-qUwUqfkW">
<emu-t>static</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22712"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockBody">ClassStaticBlockBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="ClassStaticBlockBody" id="prod-ClassStaticBlockBody">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockBody">ClassStaticBlockBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="oh0jsomm" id="prod-BArMnydQ">
<emu-nt id="_ref_22713"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassStaticBlockStatementList" id="prod-ClassStaticBlockStatementList">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7wzunuv6" id="prod-uVY-nrQL">
<emu-nt params="~Yield, +Await, ~Return" optional="" id="_ref_22714"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a><emu-mods><emu-params>[~Yield, +Await, ~Return]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>A class definition is always <emu-xref href="#sec-strict-mode-code" id="_ref_7989"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref>.</p>
</div></emu-note>
<emu-clause id="sec-class-definitions-static-semantics-early-errors">
<h1><span class="secnum">15.7.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="ClassTail" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0uhgf3fw">
<emu-nt optional="" id="_ref_22715"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>{</emu-t>
<emu-nt id="_ref_22716"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
<p>It is a Syntax Error if <emu-nt id="_ref_22717"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a></emu-nt> is not present and the following algorithm returns <emu-val>true</emu-val>:</p>
<emu-alg><ol><li>Let <var>constructor</var> be the <emu-xref aoid="ConstructorMethod" id="_ref_7990"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-constructormethod">ConstructorMethod</a></emu-xref> of <emu-nt id="_ref_22718"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt>.</li><li>If <var>constructor</var> is <emu-const>empty</emu-const>, return <emu-val>false</emu-val>.</li><li>Return <emu-xref aoid="HasDirectSuper" id="_ref_7991"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper">HasDirectSuper</a></emu-xref> of <var>constructor</var>.</li></ol></emu-alg>
</li>
</ul>
<emu-grammar><emu-production name="ClassBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1y1dunax"><emu-nt id="_ref_22719"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="PrototypePropertyNameList" id="_ref_7992"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-prototypepropertynamelist">PrototypePropertyNameList</a></emu-xref> of <emu-nt id="_ref_22720"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> contains more than one occurrence of <emu-val>"constructor"</emu-val>.
</li>
<li>
It is a Syntax Error if the <emu-xref aoid="PrivateBoundIdentifiers" id="_ref_7993"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers">PrivateBoundIdentifiers</a></emu-xref> of <emu-nt id="_ref_22721"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> contains any duplicate entries, unless the name is used once for a getter and once for a setter and in no other entries, and the getter and setter are either both static or both non-static.
</li>
</ul>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s8ilfl9g"><emu-nt id="_ref_22722"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="PropName" id="_ref_7994"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_22723"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is not <emu-val>"constructor"</emu-val> and <emu-xref aoid="HasDirectSuper" id="_ref_7995"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper">HasDirectSuper</a></emu-xref> of <emu-nt id="_ref_22724"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if the <emu-xref aoid="PropName" id="_ref_7996"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_22725"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is <emu-val>"constructor"</emu-val> and <emu-xref aoid="SpecialMethod" id="_ref_7997"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-specialmethod">SpecialMethod</a></emu-xref> of <emu-nt id="_ref_22726"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is <emu-val>true</emu-val>.
</li>
</ul>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-ljgtrpo">
<emu-t>static</emu-t>
<emu-nt id="_ref_22727"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if <emu-xref aoid="HasDirectSuper" id="_ref_7998"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper">HasDirectSuper</a></emu-xref> of <emu-nt id="_ref_22728"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if the <emu-xref aoid="PropName" id="_ref_7999"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_22729"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is <emu-val>"prototype"</emu-val>.
</li>
</ul>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bwbyf1-5">
<emu-nt id="_ref_22730"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>It is a Syntax Error if the <emu-xref aoid="PropName" id="_ref_8000"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_22731"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt> is <emu-val>"constructor"</emu-val>.</li>
</ul>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cpyv1xvc">
<emu-t>static</emu-t>
<emu-nt id="_ref_22732"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="PropName" id="_ref_8001"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_22733"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt> is either <emu-val>"prototype"</emu-val> or <emu-val>"constructor"</emu-val>.
</li>
</ul>
<emu-grammar><emu-production name="FieldDefinition">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rqzzdcte">
<emu-nt id="_ref_22734"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-nt optional="" id="_ref_22735"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>It is a Syntax Error if <emu-nt id="_ref_22736"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> is present and <emu-xref aoid="ContainsArguments" id="_ref_8002"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsarguments">ContainsArguments</a></emu-xref> of <emu-nt id="_ref_22737"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22738"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> is present and <emu-nt id="_ref_22739"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8003"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22740"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.</li>
</ul>
<emu-grammar><emu-production name="ClassElementName" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ie2-zc1c"><emu-nt id="_ref_22741"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>It is a Syntax Error if the <emu-xref aoid="StringValue" id="_ref_8004"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22742"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt> is <emu-val>"#constructor"</emu-val>.</li>
</ul>
<emu-grammar><emu-production name="ClassStaticBlockBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockBody">ClassStaticBlockBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="oh0jsomm"><emu-nt id="_ref_22743"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>
It is a Syntax Error if the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8005"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22744"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> contains any duplicate entries.
</li>
<li>
It is a Syntax Error if any element of the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8006"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22745"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> also occurs in the <emu-xref aoid="VarDeclaredNames" id="_ref_8007"><a href="syntax-directed-operations.html#sec-static-semantics-vardeclarednames">VarDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22746"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="ContainsDuplicateLabels" id="_ref_8008"><a href="syntax-directed-operations.html#sec-static-semantics-containsduplicatelabels">ContainsDuplicateLabels</a></emu-xref> of <emu-nt id="_ref_22747"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> with argument « » is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="ContainsUndefinedBreakTarget" id="_ref_8009"><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedbreaktarget">ContainsUndefinedBreakTarget</a></emu-xref> of <emu-nt id="_ref_22748"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> with argument « » is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="ContainsUndefinedContinueTarget" id="_ref_8010"><a href="syntax-directed-operations.html#sec-static-semantics-containsundefinedcontinuetarget">ContainsUndefinedContinueTarget</a></emu-xref> of <emu-nt id="_ref_22749"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> with arguments « » and « » is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-xref aoid="ContainsArguments" id="_ref_8011"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsarguments">ContainsArguments</a></emu-xref> of <emu-nt id="_ref_22750"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22751"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8012"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22752"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.
</li>
<li>
It is a Syntax Error if <emu-nt id="_ref_22753"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8013"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <code>await</code> is <emu-val>true</emu-val>.
</li>
</ul>
</emu-clause>
<emu-clause id="sec-static-semantics-classelementkind" type="sdo" aoid="ClassElementKind">
<h1><span class="secnum">15.7.2</span> Static Semantics: ClassElementKind</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8014"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ClassElementKind takes no arguments and returns <emu-const>constructor-method</emu-const>, <emu-const>non-constructor-method</emu-const>, or <emu-const>empty</emu-const>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s8ilfl9g" id="prod-z4kY36XR"><emu-nt id="_ref_22754"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If the <emu-xref aoid="PropName" id="_ref_8015"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_22755"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> is <emu-val>"constructor"</emu-val>, return <emu-const>constructor-method</emu-const>.</li><li>Return <emu-const>non-constructor-method</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-ljgtrpo" id="prod-WYqnrGO2">
<emu-t>static</emu-t>
<emu-nt id="_ref_22756"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt>
</emu-rhs>
<emu-rhs a="bwbyf1-5" id="prod-gbiOT0dB">
<emu-nt id="_ref_22757"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
<emu-rhs a="cpyv1xvc" id="prod-aKP7bsri">
<emu-t>static</emu-t>
<emu-nt id="_ref_22758"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-const>non-constructor-method</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2ui-f2qn" id="prod--zCXluqv"><emu-nt id="_ref_22759"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlock">ClassStaticBlock</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-const>non-constructor-method</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sg2sawim" id="prod-U_NLPgRJ"><emu-t>;</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-constructormethod" type="sdo" aoid="ConstructorMethod">
<h1><span class="secnum">15.7.3</span> Static Semantics: ConstructorMethod</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8016"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ConstructorMethod takes no arguments and returns a <emu-nt id="_ref_22760"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8017"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref> or <emu-const>empty</emu-const>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassElementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="crvluhmw" id="prod-5dD0G3pr"><emu-nt id="_ref_22761"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If the <emu-xref aoid="ClassElementKind" id="_ref_8018"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementkind">ClassElementKind</a></emu-xref> of <emu-nt id="_ref_22762"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> is <emu-const>constructor-method</emu-const>, return <emu-nt id="_ref_22763"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>.</li><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="msulavvt" id="prod-6CQGn2J9">
<emu-nt id="_ref_22764"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt>
<emu-nt id="_ref_22765"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>head</var> be the <emu-xref aoid="ConstructorMethod" id="_ref_8019"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-constructormethod">ConstructorMethod</a></emu-xref> of <emu-nt id="_ref_22766"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt>.</li><li>If <var>head</var> is not <emu-const>empty</emu-const>, return <var>head</var>.</li><li>If the <emu-xref aoid="ClassElementKind" id="_ref_8020"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementkind">ClassElementKind</a></emu-xref> of <emu-nt id="_ref_22767"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> is <emu-const>constructor-method</emu-const>, return <emu-nt id="_ref_22768"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>.</li><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Early Error rules ensure that there is only one method definition named <emu-val>"constructor"</emu-val> and that it is not an <emu-xref href="#sec-object-type" id="_ref_8021"><a href="ecmascript-data-types-and-values.html#sec-object-type">accessor property</a></emu-xref> or generator definition.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-static-semantics-isstatic" type="sdo" aoid="IsStatic">
<h1><span class="secnum">15.7.4</span> Static Semantics: IsStatic</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8022"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> IsStatic takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s8ilfl9g" id="prod-CtxLpivn"><emu-nt id="_ref_22769"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-ljgtrpo" id="prod-lR6jUbAy">
<emu-t>static</emu-t>
<emu-nt id="_ref_22770"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bwbyf1-5" id="prod-gXtZ0OpF">
<emu-nt id="_ref_22771"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cpyv1xvc" id="prod-wyUVxCrb">
<emu-t>static</emu-t>
<emu-nt id="_ref_22772"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2ui-f2qn" id="prod-1JW7WXBn"><emu-nt id="_ref_22773"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlock">ClassStaticBlock</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sg2sawim" id="prod-LP0OJ3qJ"><emu-t>;</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-nonconstructorelements" oldids="sec-static-semantics-nonconstructormethoddefinitions" type="sdo" aoid="NonConstructorElements"><span id="sec-static-semantics-nonconstructormethoddefinitions"></span>
<h1><span class="secnum">15.7.5</span> Static Semantics: NonConstructorElements</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8023"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> NonConstructorElements takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8024"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-nt id="_ref_22774"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8025"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Nodes</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassElementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="crvluhmw" id="prod-19e_yBXp"><emu-nt id="_ref_22775"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If the <emu-xref aoid="ClassElementKind" id="_ref_8026"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementkind">ClassElementKind</a></emu-xref> of <emu-nt id="_ref_22776"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> is <emu-const>non-constructor-method</emu-const>, then<ol><li>Return « <emu-nt id="_ref_22777"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>&nbsp;».</li></ol></li><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8027"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="msulavvt" id="prod-ax67ii0j">
<emu-nt id="_ref_22778"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt>
<emu-nt id="_ref_22779"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>list</var> be the <emu-xref aoid="NonConstructorElements" id="_ref_8028"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-nonconstructorelements">NonConstructorElements</a></emu-xref> of <emu-nt id="_ref_22780"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt>.</li><li>If the <emu-xref aoid="ClassElementKind" id="_ref_8029"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementkind">ClassElementKind</a></emu-xref> of <emu-nt id="_ref_22781"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> is <emu-const>non-constructor-method</emu-const>, then<ol><li>Append <emu-nt id="_ref_22782"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> to <var>list</var>.</li></ol></li><li>Return <var>list</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-prototypepropertynamelist" type="sdo" aoid="PrototypePropertyNameList">
<h1><span class="secnum">15.7.6</span> Static Semantics: PrototypePropertyNameList</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8030"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> PrototypePropertyNameList takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8031"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#property-key" id="_ref_8032"><a href="ecmascript-data-types-and-values.html#property-key">property keys</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassElementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="crvluhmw" id="prod-A14zfyT4"><emu-nt id="_ref_22783"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>propName</var> be the <emu-xref aoid="PropName" id="_ref_8033"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_22784"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>.</li><li>If <var>propName</var> is <emu-const>empty</emu-const>, return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8034"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>If <emu-xref aoid="IsStatic" id="_ref_8035"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-isstatic">IsStatic</a></emu-xref> of <emu-nt id="_ref_22785"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> is <emu-val>true</emu-val>, return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8036"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Return « <var>propName</var>&nbsp;».</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="msulavvt" id="prod-yD4OjNLB">
<emu-nt id="_ref_22786"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt>
<emu-nt id="_ref_22787"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>list</var> be the <emu-xref aoid="PrototypePropertyNameList" id="_ref_8037"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-prototypepropertynamelist">PrototypePropertyNameList</a></emu-xref> of <emu-nt id="_ref_22788"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt>.</li><li>Let <var>propName</var> be the <emu-xref aoid="PropName" id="_ref_8038"><a href="syntax-directed-operations.html#sec-static-semantics-propname">PropName</a></emu-xref> of <emu-nt id="_ref_22789"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>.</li><li>If <var>propName</var> is <emu-const>empty</emu-const>, return <var>list</var>.</li><li>If <emu-xref aoid="IsStatic" id="_ref_8039"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-isstatic">IsStatic</a></emu-xref> of <emu-nt id="_ref_22790"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> is <emu-val>true</emu-val>, return <var>list</var>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_8040"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>list</var> and « <var>propName</var>&nbsp;».</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-allprivateidentifiersvalid" type="sdo" aoid="AllPrivateIdentifiersValid">
<h1><span class="secnum">15.7.7</span> Static Semantics: AllPrivateIdentifiersValid</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8041"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> AllPrivateIdentifiersValid takes argument <var>names</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8042"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings) and returns a Boolean.</p>
<p>Every grammar production alternative in this specification which is not listed below implicitly has the following default definition of AllPrivateIdentifiersValid:</p>
<emu-alg><ol><li>For each child node <var>child</var> of this <emu-xref href="#sec-syntactic-grammar" id="_ref_8043"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, do<ol><li>If <var>child</var> is an instance of a nonterminal, then<ol><li>If <emu-xref aoid="AllPrivateIdentifiersValid" id="_ref_8044"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid">AllPrivateIdentifiersValid</a></emu-xref> of <var>child</var> with argument <var>names</var> is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li></ol></li></ol></li><li>Return <emu-val>true</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="MemberExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0uk9afbi" id="prod-hH1hyF7o">
<emu-nt id="_ref_22791"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_22792"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>names</var> contains the <emu-xref aoid="StringValue" id="_ref_8045"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22793"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>, then<ol><li>Return <emu-xref aoid="AllPrivateIdentifiersValid" id="_ref_8046"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid">AllPrivateIdentifiersValid</a></emu-xref> of <emu-nt id="_ref_22794"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> with argument <var>names</var>.</li></ol></li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="CallExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cysjk9wh" id="prod-9EwGAkEl">
<emu-nt id="_ref_22795"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_22796"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>names</var> contains the <emu-xref aoid="StringValue" id="_ref_8047"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22797"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>, then<ol><li>Return <emu-xref aoid="AllPrivateIdentifiersValid" id="_ref_8048"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid">AllPrivateIdentifiersValid</a></emu-xref> of <emu-nt id="_ref_22798"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> with argument <var>names</var>.</li></ol></li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0xlnjlpz" id="prod-GLUsMLG4">
<emu-t>?.</emu-t>
<emu-nt id="_ref_22799"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>names</var> contains the <emu-xref aoid="StringValue" id="_ref_8049"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22800"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dnp-fbqk" id="prod-LZl0sxgi">
<emu-nt id="_ref_22801"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_22802"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>names</var> contains the <emu-xref aoid="StringValue" id="_ref_8050"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22803"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>, then<ol><li>Return <emu-xref aoid="AllPrivateIdentifiersValid" id="_ref_8051"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid">AllPrivateIdentifiersValid</a></emu-xref> of <emu-nt id="_ref_22804"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> with argument <var>names</var>.</li></ol></li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1y1dunax" id="prod-7rm6mrow"><emu-nt id="_ref_22805"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>newNames</var> be the <emu-xref href="#list-concatenation" id="_ref_8052"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>names</var> and the <emu-xref aoid="PrivateBoundIdentifiers" id="_ref_8053"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers">PrivateBoundIdentifiers</a></emu-xref> of <emu-nt id="_ref_22806"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt>.</li><li>Return <emu-xref aoid="AllPrivateIdentifiersValid" id="_ref_8054"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid">AllPrivateIdentifiersValid</a></emu-xref> of <emu-nt id="_ref_22807"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> with argument <var>newNames</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="RelationalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bfkxjj0f" id="prod-5aKAQc0s">
<emu-nt id="_ref_22808"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt id="_ref_22809"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>names</var> contains the <emu-xref aoid="StringValue" id="_ref_8055"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22810"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>, then<ol><li>Return <emu-xref aoid="AllPrivateIdentifiersValid" id="_ref_8056"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-allprivateidentifiersvalid">AllPrivateIdentifiersValid</a></emu-xref> of <emu-nt id="_ref_22811"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt> with argument <var>names</var>.</li></ol></li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-privateboundidentifiers" type="sdo" aoid="PrivateBoundIdentifiers">
<h1><span class="secnum">15.7.8</span> Static Semantics: PrivateBoundIdentifiers</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8057"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> PrivateBoundIdentifiers takes no arguments and returns a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8058"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of Strings. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="FieldDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rqzzdcte" id="prod-QQ9gR7rA">
<emu-nt id="_ref_22812"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-nt optional="" id="_ref_22813"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="PrivateBoundIdentifiers" id="_ref_8059"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers">PrivateBoundIdentifiers</a></emu-xref> of <emu-nt id="_ref_22814"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElementName" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ie2-zc1c" id="prod-3FDawUhc"><emu-nt id="_ref_22815"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8060"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> whose sole element is the <emu-xref aoid="StringValue" id="_ref_8061"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22816"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElementName">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bmyo-0oj" id="prod-T6diBlyd">
<emu-nt id="_ref_22817"><a href="ecmascript-language-expressions.html#prod-PropertyName">PropertyName</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ClassElement">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2ui-f2qn" id="prod-8T9v42E5">
<emu-nt id="_ref_22818"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlock">ClassStaticBlock</a></emu-nt>
</emu-rhs>
<emu-rhs a="sg2sawim" id="prod-mMa7qdyC">
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8062"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="msulavvt" id="prod-PTQtTdvS">
<emu-nt id="_ref_22819"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt>
<emu-nt id="_ref_22820"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>names1</var> be the <emu-xref aoid="PrivateBoundIdentifiers" id="_ref_8063"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers">PrivateBoundIdentifiers</a></emu-xref> of <emu-nt id="_ref_22821"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementList">ClassElementList</a></emu-nt>.</li><li>Let <var>names2</var> be the <emu-xref aoid="PrivateBoundIdentifiers" id="_ref_8064"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers">PrivateBoundIdentifiers</a></emu-xref> of <emu-nt id="_ref_22822"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt>.</li><li>Return the <emu-xref href="#list-concatenation" id="_ref_8065"><a href="ecmascript-data-types-and-values.html#list-concatenation">list-concatenation</a></emu-xref> of <var>names1</var> and <var>names2</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="MethodDefinition">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ayx1_q" id="prod-pxy6kYq7">
<emu-nt id="_ref_22823"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22824"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22825"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="s7vk7pda" id="prod-axmlrr3F">
<emu-t>get</emu-t>
<emu-nt id="_ref_22826"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22827"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="lbu40xzc" id="prod-9-TzGQnW">
<emu-t>set</emu-t>
<emu-nt id="_ref_22828"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22829"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22830"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="GeneratorMethod">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e6yupcp1" id="prod-Qvq1cmEs">
<emu-t>*</emu-t>
<emu-nt id="_ref_22831"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22832"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22833"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncMethod">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cfy3_9l8" id="prod-zTa8Ph70">
<emu-t>async</emu-t>
<emu-nt id="_ref_22834"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22835"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22836"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncGeneratorMethod">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2edb8sar" id="prod-1nK7U43p">
<emu-t>async</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22837"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22838"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22839"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="PrivateBoundIdentifiers" id="_ref_8066"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers">PrivateBoundIdentifiers</a></emu-xref> of <emu-nt id="_ref_22840"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-containsarguments" type="sdo" aoid="ContainsArguments">
<h1><span class="secnum">15.7.9</span> Static Semantics: ContainsArguments</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8067"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ContainsArguments takes no arguments and returns a Boolean.</p>
<p>Every grammar production alternative in this specification which is not listed below implicitly has the following default definition of ContainsArguments:</p>
<emu-alg><ol><li>For each child node <var>child</var> of this <emu-xref href="#sec-syntactic-grammar" id="_ref_8068"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, do<ol><li>If <var>child</var> is an instance of a nonterminal, then<ol><li>If <emu-xref aoid="ContainsArguments" id="_ref_8069"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsarguments">ContainsArguments</a></emu-xref> of <var>child</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li></ol></li></ol></li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="IdentifierReference" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bras6mo_" id="prod-K0gmEtvp"><emu-nt id="_ref_22841"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If the <emu-xref aoid="StringValue" id="_ref_8070"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22842"><a href="ecmascript-language-expressions.html#prod-Identifier">Identifier</a></emu-nt> is <emu-val>"arguments"</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FunctionDeclaration">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gxoavzvy" id="prod-cYRKXADu">
<emu-t>function</emu-t>
<emu-nt id="_ref_22843"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22844"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22845"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="smus6qca" id="prod-fA8Y53Jv">
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22846"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22847"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="FunctionExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="g3mtfiqq" id="prod-DKZGJMJp">
<emu-t>function</emu-t>
<emu-nt optional="" id="_ref_22848"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22849"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22850"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="GeneratorDeclaration">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorDeclaration">GeneratorDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fbyztjbh" id="prod-Uf4haGDs">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22851"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22852"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22853"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="dsczygsq" id="prod-7bSRnJkd">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22854"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22855"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="GeneratorExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="32ghovyc" id="prod-RyrSiZbO">
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt optional="" id="_ref_22856"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22857"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22858"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncGeneratorDeclaration">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e9lmm5cj" id="prod-3lM6XkIw">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22859"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22860"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22861"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="xruu4gg0" id="prod-w57asuPi">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22862"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22863"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncGeneratorExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="nplor0n0" id="prod-H3uNNgf7">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>*</emu-t>
<emu-nt optional="" id="_ref_22864"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22865"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22866"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncFunctionDeclaration">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4mmt35rm" id="prod-k_4DyjCo">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-nt id="_ref_22867"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22868"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22869"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="agdmcdye" id="prod-TdFyphFg">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_22870"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22871"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncFunctionExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1_djgdhl" id="prod-nEJuWHii">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-nt optional="" id="_ref_22872"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22873"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22874"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="MethodDefinition">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="f2ayx1_q" id="prod-6Kc2wh10">
<emu-nt id="_ref_22875"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22876"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22877"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="s7vk7pda" id="prod-9ZjrMW3N">
<emu-t>get</emu-t>
<emu-nt id="_ref_22878"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22879"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="lbu40xzc" id="prod-WPITwaqC">
<emu-t>set</emu-t>
<emu-nt id="_ref_22880"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22881"><a href="ecmascript-language-functions-and-classes.html#prod-PropertySetParameterList">PropertySetParameterList</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22882"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="GeneratorMethod">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorMethod">GeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="e6yupcp1" id="prod-6uQ7SWxA">
<emu-t>*</emu-t>
<emu-nt id="_ref_22883"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22884"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22885"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncGeneratorMethod">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorMethod">AsyncGeneratorMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2edb8sar" id="prod-mThhZsRd">
<emu-t>async</emu-t>
<emu-t>*</emu-t>
<emu-nt id="_ref_22886"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22887"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22888"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncMethod">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cfy3_9l8" id="prod-UU7zbVYJ">
<emu-t>async</emu-t>
<emu-nt id="_ref_22889"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22890"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22891"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="ContainsArguments" id="_ref_8071"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-containsarguments">ContainsArguments</a></emu-xref> of <emu-nt id="_ref_22892"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-classfielddefinitionevaluation" type="sdo" aoid="ClassFieldDefinitionEvaluation">
<h1><span class="secnum">15.7.10</span> Runtime Semantics: ClassFieldDefinitionEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8072"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ClassFieldDefinitionEvaluation takes argument <var>homeObject</var> (an Object) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8073"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#sec-classfielddefinition-record-specification-type" id="_ref_8074"><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type">ClassFieldDefinition Record</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8075"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="FieldDefinition" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="rqzzdcte" id="prod-deOh_-BS">
<emu-nt id="_ref_22893"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-nt optional="" id="_ref_22894"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>name</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_8076"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22895"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>.</li><li>If <emu-nt id="_ref_22896"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt> is present, then<ol><li>Let <var>formalParameterList</var> be an instance of the production <emu-grammar><emu-production name="FormalParameters" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb"><emu-gann>[empty]</emu-gann></emu-rhs>
</emu-production>
</emu-grammar>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_8077"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_8078"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the empty sequence of Unicode code points.</li><li>Let <var>initializer</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_8079"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_8080"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <var>formalParameterList</var>, <emu-nt id="_ref_22897"><a href="ecmascript-language-expressions.html#prod-Initializer">Initializer</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="MakeMethod" id="_ref_8081"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>(<var>initializer</var>, <var>homeObject</var>).</li><li>Set <var>initializer</var>.<var class="field">[[ClassFieldInitializerName]]</var> to <var>name</var>.</li></ol></li><li>Else,<ol><li>Let <var>initializer</var> be <emu-const>empty</emu-const>.</li></ol></li><li>Return the <emu-xref href="#sec-classfielddefinition-record-specification-type" id="_ref_8082"><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type">ClassFieldDefinition Record</a></emu-xref> { <var class="field">[[Name]]</var>: <var>name</var>, <var class="field">[[Initializer]]</var>: <var>initializer</var>&nbsp;}.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
The function created for <var>initializer</var> is never directly accessible to ECMAScript code.
</div></emu-note>
</emu-clause>
<emu-clause id="sec-runtime-semantics-classstaticblockdefinitionevaluation" type="sdo" aoid="ClassStaticBlockDefinitionEvaluation">
<h1><span class="secnum">15.7.11</span> Runtime Semantics: ClassStaticBlockDefinitionEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8083"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ClassStaticBlockDefinitionEvaluation takes argument <var>homeObject</var> (an Object) and returns a <emu-xref href="#sec-classstaticblockdefinition-record-specification-type" id="_ref_8084"><a href="ecmascript-data-types-and-values.html#sec-classstaticblockdefinition-record-specification-type">ClassStaticBlockDefinition Record</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassStaticBlock" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlock">ClassStaticBlock</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="hv6hopt7" id="prod-sy-617ri">
<emu-t>static</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22898"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockBody">ClassStaticBlockBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>lex</var> be the <emu-xref href="#running-execution-context" id="_ref_8085"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_8086"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the empty sequence of Unicode code points.</li><li>Let <var>formalParameters</var> be an instance of the production <emu-grammar><emu-production name="FormalParameters" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb"><emu-gann>[empty]</emu-gann></emu-rhs>
</emu-production>
</emu-grammar>.</li><li id="step-synthetic-class-static-block-fn">Let <var>bodyFunction</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_8087"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_8088"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>, <var>sourceText</var>, <var>formalParameters</var>, <emu-nt id="_ref_22899"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockBody">ClassStaticBlockBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>lex</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="MakeMethod" id="_ref_8089"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makemethod">MakeMethod</a></emu-xref>(<var>bodyFunction</var>, <var>homeObject</var>).</li><li>Return the <emu-xref href="#sec-classstaticblockdefinition-record-specification-type" id="_ref_8090"><a href="ecmascript-data-types-and-values.html#sec-classstaticblockdefinition-record-specification-type">ClassStaticBlockDefinition Record</a></emu-xref> { <var class="field">[[BodyFunction]]</var>: <var>bodyFunction</var>&nbsp;}.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">The function <var>bodyFunction</var> is never directly accessible to ECMAScript code.</div></emu-note>
</emu-clause>
<emu-clause id="sec-runtime-semantics-evaluateclassstaticblockbody" type="sdo" aoid="EvaluateClassStaticBlockBody">
<h1><span class="secnum">15.7.12</span> Runtime Semantics: EvaluateClassStaticBlockBody</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8091"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> EvaluateClassStaticBlockBody takes argument <var>functionObject</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_8092"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8093"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref> or a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8094"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">throw completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassStaticBlockBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockBody">ClassStaticBlockBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="oh0jsomm" id="prod-1dy60deL"><emu-nt id="_ref_22900"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_8095"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>functionObject</var> is a synthetic function created by <emu-xref aoid="ClassStaticBlockDefinitionEvaluation" id="_ref_8096"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classstaticblockdefinitionevaluation">ClassStaticBlockDefinitionEvaluation</a></emu-xref> step <emu-xref href="#step-synthetic-class-static-block-fn" id="_ref_470"><a href="ecmascript-language-functions-and-classes.html#step-synthetic-class-static-block-fn">5</a></emu-xref>.</li><li>Perform !&nbsp;<emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_8097"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation">FunctionDeclarationInstantiation</a></emu-xref>(<var>functionObject</var>, «&nbsp;»).</li><li>Perform ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_8098"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22901"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt>.</li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_8099"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<emu-val>undefined</emu-val>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-static-semantics-classelementevaluation" type="sdo" aoid="ClassElementEvaluation">
<h1><span class="secnum">15.7.13</span> Runtime Semantics: ClassElementEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8100"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ClassElementEvaluation takes argument <var>object</var> (an Object) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8101"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> either a <emu-xref href="#sec-classfielddefinition-record-specification-type" id="_ref_8102"><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type">ClassFieldDefinition Record</a></emu-xref>, a <emu-xref href="#sec-classstaticblockdefinition-record-specification-type" id="_ref_8103"><a href="ecmascript-data-types-and-values.html#sec-classstaticblockdefinition-record-specification-type">ClassStaticBlockDefinition Record</a></emu-xref>, a <emu-xref href="#sec-privateelement-specification-type" id="_ref_8104"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref>, or <emu-const>unused</emu-const>, or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8105"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassElement">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bwbyf1-5" id="prod-tPq9hD-G">
<emu-nt id="_ref_22902"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
<emu-rhs a="cpyv1xvc" id="prod-Cn1oLmsN">
<emu-t>static</emu-t>
<emu-nt id="_ref_22903"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="ClassFieldDefinitionEvaluation" id="_ref_8106"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classfielddefinitionevaluation" class="e-user-code">ClassFieldDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_22904"><a href="ecmascript-language-functions-and-classes.html#prod-FieldDefinition">FieldDefinition</a></emu-nt> with argument <var>object</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s8ilfl9g" id="prod-RV4ZOA0y">
<emu-nt id="_ref_22905"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt>
</emu-rhs>
<emu-rhs a="-ljgtrpo" id="prod-DNhqQKHO">
<emu-t>static</emu-t>
<emu-nt id="_ref_22906"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return ?&nbsp;<emu-xref aoid="MethodDefinitionEvaluation" id="_ref_8107"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-methoddefinitionevaluation" class="e-user-code">MethodDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_22907"><a href="ecmascript-language-functions-and-classes.html#prod-MethodDefinition">MethodDefinition</a></emu-nt> with arguments <var>object</var> and <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="2ui-f2qn" id="prod-Hb23PvBK"><emu-nt id="_ref_22908"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlock">ClassStaticBlock</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return the <emu-xref aoid="ClassStaticBlockDefinitionEvaluation" id="_ref_8108"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classstaticblockdefinitionevaluation">ClassStaticBlockDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_22909"><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlock">ClassStaticBlock</a></emu-nt> with argument <var>object</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElement" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="sg2sawim" id="prod-V88LvFxI"><emu-t>;</emu-t></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-classdefinitionevaluation" oldids="sec-default-constructor-functions" type="sdo" aoid="ClassDefinitionEvaluation"><span id="sec-default-constructor-functions"></span>
<h1><span class="secnum">15.7.14</span> Runtime Semantics: ClassDefinitionEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8109"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> ClassDefinitionEvaluation takes arguments <var>classBinding</var> (a String or <emu-val>undefined</emu-val>), <var>className</var> (a <emu-xref href="#property-key" id="_ref_8110"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or a <emu-xref href="#sec-private-names" id="_ref_8111"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>), and <var>sourceText</var> (<emu-xref href="#sec-source-text" id="_ref_8112"><a href="ecmascript-language-source-code.html#sec-source-text">ECMAScript source text</a></emu-xref>) and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8113"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#function-object" id="_ref_8114"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8115"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>.</p>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>For ease of specification, private methods and accessors are included alongside private fields in the <var class="field">[[PrivateElements]]</var> slot of class instances. However, any given object has either all or none of the private methods and accessors defined by a given class. This feature has been designed so that implementations may choose to implement private methods and accessors using a strategy which does not require tracking each method or accessor individually.</p>
<p>For example, an implementation could directly associate instance private methods with their corresponding <emu-xref href="#sec-private-names" id="_ref_8116"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref> and track, for each object, which class <emu-xref href="#constructor" id="_ref_8117"><a href="ecmascript-data-types-and-values.html#constructor">constructors</a></emu-xref> have run with that object as their <code>this</code> value. Looking up an instance private method on an object then consists of checking that the class <emu-xref href="#constructor" id="_ref_8118"><a href="ecmascript-data-types-and-values.html#constructor">constructor</a></emu-xref> which defines the method has been used to initialize the object, then returning the method associated with the <emu-xref href="#sec-private-names" id="_ref_8119"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>.</p>
<p>This differs from private fields: because field initializers can throw during class instantiation, an individual object may have some proper subset of the private fields of a given class, and so private fields must in general be tracked individually.</p>
</div></emu-note>
<p>It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassTail" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uopqpdqx" id="prod-AcPtObVs">
<emu-nt optional="" id="_ref_22910"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>{</emu-t>
<emu-nt optional="" id="_ref_22911"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_8120"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>classEnv</var> be <emu-xref aoid="NewDeclarativeEnvironment" id="_ref_8121"><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a></emu-xref>(<var>env</var>).</li><li>If <var>classBinding</var> is not <emu-val>undefined</emu-val>, then<ol><li>Perform !&nbsp;<var>classEnv</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_8122"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>classBinding</var>, <emu-val>true</emu-val>).</li></ol></li><li>Let <var>outerPrivateEnvironment</var> be the <emu-xref href="#running-execution-context" id="_ref_8123"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>classPrivateEnvironment</var> be <emu-xref aoid="NewPrivateEnvironment" id="_ref_8124"><a href="executable-code-and-execution-contexts.html#sec-newprivateenvironment">NewPrivateEnvironment</a></emu-xref>(<var>outerPrivateEnvironment</var>).</li><li>If <emu-nt id="_ref_22912"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt> is present, then<ol><li>For each String <var>dn</var> of the <emu-xref aoid="PrivateBoundIdentifiers" id="_ref_8125"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-privateboundidentifiers">PrivateBoundIdentifiers</a></emu-xref> of <emu-nt id="_ref_22913"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt>, do<ol><li>If <var>classPrivateEnvironment</var>.<var class="field">[[Names]]</var> contains a <emu-xref href="#sec-private-names" id="_ref_8126"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref> <var>pn</var> such that <var>pn</var>.<var class="field">[[Description]]</var> is <var>dn</var>, then<ol><li><emu-xref href="#assert" id="_ref_8127"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: This is only possible for getter/setter pairs.</li></ol></li><li>Else,<ol><li>Let <var>name</var> be a new <emu-xref href="#sec-private-names" id="_ref_8128"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref> whose <var class="field">[[Description]]</var> is <var>dn</var>.</li><li>Append <var>name</var> to <var>classPrivateEnvironment</var>.<var class="field">[[Names]]</var>.</li></ol></li></ol></li></ol></li><li>If <emu-nt id="_ref_22914"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a></emu-nt> is not present, then<ol><li>Let <var>protoParent</var> be <emu-xref href="#sec-properties-of-the-object-prototype-object" id="_ref_8129"><a href="fundamental-objects.html#sec-properties-of-the-object-prototype-object">%Object.prototype%</a></emu-xref>.</li><li>Let <var>constructorParent</var> be <emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_8130"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>.</li></ol></li><li>Else,<ol><li>Set the <emu-xref href="#running-execution-context" id="_ref_8131"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment to <var>classEnv</var>.</li><li>NOTE: The <emu-xref href="#running-execution-context" id="_ref_8132"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment is <var>outerPrivateEnvironment</var> when evaluating <emu-nt id="_ref_22915"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a></emu-nt>.</li><li>Let <var>superclassRef</var> be <emu-xref aoid="Completion" id="_ref_8133"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="Evaluation" id="_ref_8134"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_22916"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a></emu-nt>).</li><li>Set the <emu-xref href="#running-execution-context" id="_ref_8135"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment to <var>env</var>.</li><li>Let <var>superclass</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_8136"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(? <var>superclassRef</var>).</li><li>If <var>superclass</var> is <emu-val>null</emu-val>, then<ol><li>Let <var>protoParent</var> be <emu-val>null</emu-val>.</li><li>Let <var>constructorParent</var> be <emu-xref href="#sec-properties-of-the-function-prototype-object" id="_ref_8137"><a href="fundamental-objects.html#sec-properties-of-the-function-prototype-object">%Function.prototype%</a></emu-xref>.</li></ol></li><li>Else if <emu-xref aoid="IsConstructor" id="_ref_8138"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>superclass</var>) is <emu-val>false</emu-val>, then<ol><li>Throw a <emu-val>TypeError</emu-val> exception.</li></ol></li><li>Else,<ol><li>Let <var>protoParent</var> be ?&nbsp;<emu-xref aoid="Get" id="_ref_8139"><a href="abstract-operations.html#sec-get-o-p" class="e-user-code">Get</a></emu-xref>(<var>superclass</var>, <emu-val>"prototype"</emu-val>).</li><li>If <var>protoParent</var> <emu-xref href="#sec-object-type" id="_ref_8140"><a href="ecmascript-data-types-and-values.html#sec-object-type">is not an Object</a></emu-xref> and <var>protoParent</var> is not <emu-val>null</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>constructorParent</var> be <var>superclass</var>.</li></ol></li></ol></li><li>Let <var>proto</var> be <emu-xref aoid="OrdinaryObjectCreate" id="_ref_8141"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryobjectcreate">OrdinaryObjectCreate</a></emu-xref>(<var>protoParent</var>).</li><li>If <emu-nt id="_ref_22917"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt> is not present, let <var>constructor</var> be <emu-const>empty</emu-const>.</li><li>Else, let <var>constructor</var> be the <emu-xref aoid="ConstructorMethod" id="_ref_8142"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-constructormethod">ConstructorMethod</a></emu-xref> of <emu-nt id="_ref_22918"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt>.</li><li>Set the <emu-xref href="#running-execution-context" id="_ref_8143"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment to <var>classEnv</var>.</li><li>Set the <emu-xref href="#running-execution-context" id="_ref_8144"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment to <var>classPrivateEnvironment</var>.</li><li>If <var>constructor</var> is <emu-const>empty</emu-const>, then<ol><li>Let <var>defaultConstructor</var> be a new <emu-xref href="#sec-abstract-closure" id="_ref_8145"><a href="ecmascript-data-types-and-values.html#sec-abstract-closure">Abstract Closure</a></emu-xref> with no parameters that captures nothing and performs the following steps when called:<ol><li>Let <var>args</var> be the <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8146"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of arguments that was passed to this function by <var class="field">[[Call]]</var> or <var class="field">[[Construct]]</var>.</li><li>If NewTarget is <emu-val>undefined</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>F</var> be the <emu-xref href="#active-function-object" id="_ref_8147"><a href="executable-code-and-execution-contexts.html#active-function-object">active function object</a></emu-xref>.</li><li>If <var>F</var>.<var class="field">[[ConstructorKind]]</var> is <emu-const>derived</emu-const>, then<ol><li>NOTE: This branch behaves similarly to <code>constructor(...args) { super(...args);&nbsp;}</code>. The most notable distinction is that while the aforementioned <emu-xref href="#sec-source-text" id="_ref_8148"><a href="ecmascript-language-source-code.html#sec-source-text">ECMAScript source text</a></emu-xref> observably calls the <emu-xref href="#sec-well-known-symbols" id="_ref_8149"><a href="ecmascript-data-types-and-values.html#sec-well-known-symbols">%Symbol.iterator%</a></emu-xref> method on <code>%Array.prototype%</code>, this function does not.</li><li>Let <var>func</var> be !&nbsp;<var>F</var>.<var class="field">[[GetPrototypeOf]]</var>().</li><li>If <emu-xref aoid="IsConstructor" id="_ref_8150"><a href="abstract-operations.html#sec-isconstructor">IsConstructor</a></emu-xref>(<var>func</var>) is <emu-val>false</emu-val>, throw a <emu-val>TypeError</emu-val> exception.</li><li>Let <var>result</var> be ?&nbsp;<emu-xref aoid="Construct" id="_ref_8151"><a href="abstract-operations.html#sec-construct" class="e-user-code">Construct</a></emu-xref>(<var>func</var>, <var>args</var>, NewTarget).</li></ol></li><li>Else,<ol><li>NOTE: This branch behaves similarly to <code>constructor() {}</code>.</li><li>Let <var>result</var> be ?&nbsp;<emu-xref aoid="OrdinaryCreateFromConstructor" id="_ref_8152"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinarycreatefromconstructor" class="e-user-code">OrdinaryCreateFromConstructor</a></emu-xref>(NewTarget, <emu-val>"%Object.prototype%"</emu-val>).</li></ol></li><li>Perform ?&nbsp;<emu-xref aoid="InitializeInstanceElements" id="_ref_8153"><a href="abstract-operations.html#sec-initializeinstanceelements" class="e-user-code">InitializeInstanceElements</a></emu-xref>(<var>result</var>, <var>F</var>).</li><li>Return <emu-xref aoid="NormalCompletion" id="_ref_8154"><a href="ecmascript-data-types-and-values.html#sec-normalcompletion">NormalCompletion</a></emu-xref>(<var>result</var>).</li></ol></li><li>Let <var>F</var> be <emu-xref aoid="CreateBuiltinFunction" id="_ref_8155"><a href="ordinary-and-exotic-objects-behaviours.html#sec-createbuiltinfunction">CreateBuiltinFunction</a></emu-xref>(<var>defaultConstructor</var>, 0, <var>className</var>, « <var class="field">[[ConstructorKind]]</var>, <var class="field">[[SourceText]]</var>, <var class="field">[[PrivateMethods]]</var>, <var class="field">[[Fields]]</var>&nbsp;», <emu-xref href="#current-realm" id="_ref_8156"><a href="executable-code-and-execution-contexts.html#current-realm">the current Realm Record</a></emu-xref>, <var>constructorParent</var>).</li></ol></li><li>Else,<ol><li>Let <var>constructorInfo</var> be !&nbsp;<emu-xref aoid="DefineMethod" id="_ref_8157"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-definemethod">DefineMethod</a></emu-xref> of <var>constructor</var> with arguments <var>proto</var> and <var>constructorParent</var>.</li><li>Let <var>F</var> be <var>constructorInfo</var>.<var class="field">[[Closure]]</var>.</li><li>Perform <emu-xref aoid="MakeClassConstructor" id="_ref_8158"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeclassconstructor">MakeClassConstructor</a></emu-xref>(<var>F</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_8159"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <var>className</var>).</li></ol></li><li>Set <var>F</var>.<var class="field">[[SourceText]]</var> to <var>sourceText</var>.</li><li>Perform <emu-xref aoid="MakeConstructor" id="_ref_8160"><a href="ordinary-and-exotic-objects-behaviours.html#sec-makeconstructor">MakeConstructor</a></emu-xref>(<var>F</var>, <emu-val>false</emu-val>, <var>proto</var>).</li><li>If <emu-nt id="_ref_22919"><a href="ecmascript-language-functions-and-classes.html#prod-ClassHeritage">ClassHeritage</a></emu-nt> is present, set <var>F</var>.<var class="field">[[ConstructorKind]]</var> to <emu-const>derived</emu-const>.</li><li>Perform !&nbsp;<emu-xref aoid="DefineMethodProperty" id="_ref_8161"><a href="ordinary-and-exotic-objects-behaviours.html#sec-definemethodproperty">DefineMethodProperty</a></emu-xref>(<var>proto</var>, <emu-val>"constructor"</emu-val>, <var>F</var>, <emu-val>false</emu-val>).</li><li>If <emu-nt id="_ref_22920"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt> is not present, let <var>elements</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8162"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Else, let <var>elements</var> be the <emu-xref aoid="NonConstructorElements" id="_ref_8163"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-nonconstructorelements">NonConstructorElements</a></emu-xref> of <emu-nt id="_ref_22921"><a href="ecmascript-language-functions-and-classes.html#prod-ClassBody">ClassBody</a></emu-nt>.</li><li>Let <var>instancePrivateMethods</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8164"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>staticPrivateMethods</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8165"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>instanceFields</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8166"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>Let <var>staticElements</var> be a new empty <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8167"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref>.</li><li>For each <emu-nt id="_ref_22922"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElement">ClassElement</a></emu-nt> <var>e</var> of <var>elements</var>, do<ol><li>If <emu-xref aoid="IsStatic" id="_ref_8168"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-isstatic">IsStatic</a></emu-xref> of <var>e</var> is <emu-val>false</emu-val>, then<ol><li>Let <var>element</var> be <emu-xref aoid="Completion" id="_ref_8169"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="ClassElementEvaluation" id="_ref_8170"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementevaluation" class="e-user-code">ClassElementEvaluation</a></emu-xref> of <var>e</var> with argument <var>proto</var>).</li></ol></li><li>Else,<ol><li>Let <var>element</var> be <emu-xref aoid="Completion" id="_ref_8171"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="ClassElementEvaluation" id="_ref_8172"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-classelementevaluation" class="e-user-code">ClassElementEvaluation</a></emu-xref> of <var>e</var> with argument <var>F</var>).</li></ol></li><li>If <var>element</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8173"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Set the <emu-xref href="#running-execution-context" id="_ref_8174"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment to <var>env</var>.</li><li>Set the <emu-xref href="#running-execution-context" id="_ref_8175"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment to <var>outerPrivateEnvironment</var>.</li><li>Return ?&nbsp;<var>element</var>.</li></ol></li><li>Set <var>element</var> to !&nbsp;<var>element</var>.</li><li>If <var>element</var> is a <emu-xref href="#sec-privateelement-specification-type" id="_ref_8176"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref>, then<ol><li><emu-xref href="#assert" id="_ref_8177"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>element</var>.<var class="field">[[Kind]]</var> is either <emu-const>method</emu-const> or <emu-const>accessor</emu-const>.</li><li>If <emu-xref aoid="IsStatic" id="_ref_8178"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-isstatic">IsStatic</a></emu-xref> of <var>e</var> is <emu-val>false</emu-val>, let <var>container</var> be <var>instancePrivateMethods</var>.</li><li>Else, let <var>container</var> be <var>staticPrivateMethods</var>.</li><li>If <var>container</var> contains a <emu-xref href="#sec-privateelement-specification-type" id="_ref_8179"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> <var>pe</var> such that <var>pe</var>.<var class="field">[[Key]]</var> is <var>element</var>.<var class="field">[[Key]]</var>, then<ol><li><emu-xref href="#assert" id="_ref_8180"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>element</var>.<var class="field">[[Kind]]</var> and <var>pe</var>.<var class="field">[[Kind]]</var> are both <emu-const>accessor</emu-const>.</li><li>If <var>element</var>.<var class="field">[[Get]]</var> is <emu-val>undefined</emu-val>, then<ol><li>Let <var>combined</var> be <emu-xref href="#sec-privateelement-specification-type" id="_ref_8181"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> { <var class="field">[[Key]]</var>: <var>element</var>.<var class="field">[[Key]]</var>, <var class="field">[[Kind]]</var>: <emu-const>accessor</emu-const>, <var class="field">[[Get]]</var>: <var>pe</var>.<var class="field">[[Get]]</var>, <var class="field">[[Set]]</var>: <var>element</var>.<var class="field">[[Set]]</var>&nbsp;}.</li></ol></li><li>Else,<ol><li>Let <var>combined</var> be <emu-xref href="#sec-privateelement-specification-type" id="_ref_8182"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> { <var class="field">[[Key]]</var>: <var>element</var>.<var class="field">[[Key]]</var>, <var class="field">[[Kind]]</var>: <emu-const>accessor</emu-const>, <var class="field">[[Get]]</var>: <var>element</var>.<var class="field">[[Get]]</var>, <var class="field">[[Set]]</var>: <var>pe</var>.<var class="field">[[Set]]</var>&nbsp;}.</li></ol></li><li>Replace <var>pe</var> in <var>container</var> with <var>combined</var>.</li></ol></li><li>Else,<ol><li>Append <var>element</var> to <var>container</var>.</li></ol></li></ol></li><li>Else if <var>element</var> is a <emu-xref href="#sec-classfielddefinition-record-specification-type" id="_ref_8183"><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type">ClassFieldDefinition Record</a></emu-xref>, then<ol><li>If <emu-xref aoid="IsStatic" id="_ref_8184"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-isstatic">IsStatic</a></emu-xref> of <var>e</var> is <emu-val>false</emu-val>, append <var>element</var> to <var>instanceFields</var>.</li><li>Else, append <var>element</var> to <var>staticElements</var>.</li></ol></li><li>Else if <var>element</var> is a <emu-xref href="#sec-classstaticblockdefinition-record-specification-type" id="_ref_8185"><a href="ecmascript-data-types-and-values.html#sec-classstaticblockdefinition-record-specification-type">ClassStaticBlockDefinition Record</a></emu-xref>, then<ol><li>Append <var>element</var> to <var>staticElements</var>.</li></ol></li></ol></li><li>Set the <emu-xref href="#running-execution-context" id="_ref_8186"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment to <var>env</var>.</li><li>If <var>classBinding</var> is not <emu-val>undefined</emu-val>, then<ol><li>Perform !&nbsp;<var>classEnv</var>.<emu-xref aoid="InitializeBinding" id="_ref_8187"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>classBinding</var>, <var>F</var>).</li></ol></li><li>Set <var>F</var>.<var class="field">[[PrivateMethods]]</var> to <var>instancePrivateMethods</var>.</li><li>Set <var>F</var>.<var class="field">[[Fields]]</var> to <var>instanceFields</var>.</li><li>For each <emu-xref href="#sec-privateelement-specification-type" id="_ref_8188"><a href="ecmascript-data-types-and-values.html#sec-privateelement-specification-type">PrivateElement</a></emu-xref> <var>method</var> of <var>staticPrivateMethods</var>, do<ol><li>Perform !&nbsp;<emu-xref aoid="PrivateMethodOrAccessorAdd" id="_ref_8189"><a href="abstract-operations.html#sec-privatemethodoraccessoradd">PrivateMethodOrAccessorAdd</a></emu-xref>(<var>F</var>, <var>method</var>).</li></ol></li><li>For each element <var>elementRecord</var> of <var>staticElements</var>, do<ol><li>If <var>elementRecord</var> is a <emu-xref href="#sec-classfielddefinition-record-specification-type" id="_ref_8190"><a href="ecmascript-data-types-and-values.html#sec-classfielddefinition-record-specification-type">ClassFieldDefinition Record</a></emu-xref>, then<ol><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_8191"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="DefineField" id="_ref_8192"><a href="abstract-operations.html#sec-definefield" class="e-user-code">DefineField</a></emu-xref>(<var>F</var>, <var>elementRecord</var>)).</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_8193"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>elementRecord</var> is a <emu-xref href="#sec-classstaticblockdefinition-record-specification-type" id="_ref_8194"><a href="ecmascript-data-types-and-values.html#sec-classstaticblockdefinition-record-specification-type">ClassStaticBlockDefinition Record</a></emu-xref>.</li><li>Let <var>result</var> be <emu-xref aoid="Completion" id="_ref_8195"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="Call" id="_ref_8196"><a href="abstract-operations.html#sec-call" class="e-user-code">Call</a></emu-xref>(<var>elementRecord</var>.<var class="field">[[BodyFunction]]</var>, <var>F</var>)).</li></ol></li><li>If <var>result</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8197"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Set the <emu-xref href="#running-execution-context" id="_ref_8198"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment to <var>outerPrivateEnvironment</var>.</li><li>Return ?&nbsp;<var>result</var>.</li></ol></li></ol></li><li>Set the <emu-xref href="#running-execution-context" id="_ref_8199"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment to <var>outerPrivateEnvironment</var>.</li><li>Return <var>F</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-bindingclassdeclarationevaluation" type="sdo" aoid="BindingClassDeclarationEvaluation">
<h1><span class="secnum">15.7.15</span> Runtime Semantics: BindingClassDeclarationEvaluation</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8200"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> BindingClassDeclarationEvaluation takes no arguments and returns either a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8201"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">normal completion containing</a></emu-xref> a <emu-xref href="#function-object" id="_ref_8202"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref> or an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8203"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="ClassDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tusuwhcv" id="prod-JmEOsNvO">
<emu-t>class</emu-t>
<emu-nt id="_ref_22923"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-nt id="_ref_22924"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>className</var> be the <emu-xref aoid="StringValue" id="_ref_8204"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22925"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8205"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22926"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>.</li><li>Let <var>value</var> be ?&nbsp;<emu-xref aoid="ClassDefinitionEvaluation" id="_ref_8206"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classdefinitionevaluation" class="e-user-code">ClassDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_22927"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt> with arguments <var>className</var>, <var>className</var>, and <var>sourceText</var>.</li><li>Let <var>env</var> be the <emu-xref href="#running-execution-context" id="_ref_8207"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s LexicalEnvironment.</li><li>Perform ?&nbsp;<emu-xref aoid="InitializeBoundName" id="_ref_8208"><a href="syntax-directed-operations.html#sec-initializeboundname" class="e-user-code">InitializeBoundName</a></emu-xref>(<var>className</var>, <var>value</var>, <var>env</var>).</li><li>Return <var>value</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1ghyizwr" id="prod-qOUNT0OA">
<emu-t>class</emu-t>
<emu-nt id="_ref_22928"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8209"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22929"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="ClassDefinitionEvaluation" id="_ref_8210"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classdefinitionevaluation" class="e-user-code">ClassDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_22930"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt> with arguments <emu-val>undefined</emu-val>, <emu-val>"default"</emu-val>, and <var>sourceText</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><emu-grammar><emu-production name="ClassDeclaration" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1ghyizwr">
<emu-t>class</emu-t>
<emu-nt id="_ref_22931"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar> only occurs as part of an <emu-nt id="_ref_22932"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> and establishing its binding is handled as part of the evaluation action for that production. See <emu-xref href="#sec-exports-runtime-semantics-evaluation" id="_ref_471"><a href="ecmascript-language-scripts-and-modules.html#sec-exports-runtime-semantics-evaluation">16.2.3.7</a></emu-xref>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-class-definitions-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">15.7.16</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="ClassDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tusuwhcv" id="prod-P7ajQhl1">
<emu-t>class</emu-t>
<emu-nt id="_ref_22933"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-nt id="_ref_22934"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Perform ?&nbsp;<emu-xref aoid="BindingClassDeclarationEvaluation" id="_ref_8211"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-bindingclassdeclarationevaluation" class="e-user-code">BindingClassDeclarationEvaluation</a></emu-xref> of this <emu-nt id="_ref_22935"><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt>.</li><li>Return <emu-const>empty</emu-const>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p><emu-grammar><emu-production name="ClassDeclaration" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassDeclaration">ClassDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1ghyizwr">
<emu-t>class</emu-t>
<emu-nt id="_ref_22936"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar> only occurs as part of an <emu-nt id="_ref_22937"><a href="ecmascript-language-scripts-and-modules.html#prod-ExportDeclaration">ExportDeclaration</a></emu-nt> and is never directly evaluated.</p>
</div></emu-note>
<emu-grammar><emu-production name="ClassExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassExpression">ClassExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1ghyizwr" id="prod-lm9h8Kwa">
<emu-t>class</emu-t>
<emu-nt id="_ref_22938"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8212"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22939"><a href="ecmascript-language-functions-and-classes.html#prod-ClassExpression">ClassExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="ClassDefinitionEvaluation" id="_ref_8213"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classdefinitionevaluation" class="e-user-code">ClassDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_22940"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt> with arguments <emu-val>undefined</emu-val>, <emu-val>""</emu-val>, and <var>sourceText</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassExpression">ClassExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tusuwhcv" id="prod-l8XcpxuG">
<emu-t>class</emu-t>
<emu-nt id="_ref_22941"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-nt id="_ref_22942"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>className</var> be the <emu-xref aoid="StringValue" id="_ref_8214"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22943"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8215"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_22944"><a href="ecmascript-language-functions-and-classes.html#prod-ClassExpression">ClassExpression</a></emu-nt>.</li><li>Return ?&nbsp;<emu-xref aoid="ClassDefinitionEvaluation" id="_ref_8216"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-classdefinitionevaluation" class="e-user-code">ClassDefinitionEvaluation</a></emu-xref> of <emu-nt id="_ref_22945"><a href="ecmascript-language-functions-and-classes.html#prod-ClassTail">ClassTail</a></emu-nt> with arguments <var>className</var>, <var>className</var>, and <var>sourceText</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassElementName" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ie2-zc1c" id="prod-jq_5Nm3c"><emu-nt id="_ref_22946"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>privateIdentifier</var> be the <emu-xref aoid="StringValue" id="_ref_8217"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_22947"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>.</li><li>Let <var>privateEnvRec</var> be the <emu-xref href="#running-execution-context" id="_ref_8218"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>names</var> be <var>privateEnvRec</var>.<var class="field">[[Names]]</var>.</li><li><emu-xref href="#assert" id="_ref_8219"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: Exactly one element of <var>names</var> is a <emu-xref href="#sec-private-names" id="_ref_8220"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref> whose <var class="field">[[Description]]</var> is <var>privateIdentifier</var>.</li><li>Let <var>privateName</var> be the <emu-xref href="#sec-private-names" id="_ref_8221"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref> in <var>names</var> whose <var class="field">[[Description]]</var> is <var>privateIdentifier</var>.</li><li>Return <var>privateName</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ClassStaticBlockStatementList" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-ClassStaticBlockStatementList">ClassStaticBlockStatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-sVEE0xLy"><emu-gann>[empty]</emu-gann></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>undefined</emu-val>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-async-function-definitions">
<h1><span class="secnum">15.8</span> Async Function Definitions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="AsyncFunctionDeclaration" params="Yield, Await, Default" id="prod-AsyncFunctionDeclaration">
<emu-nt params="Yield, Await, Default"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a><emu-mods><emu-params>[Yield, Await, Default]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="9rildsyw" id="prod-iAuKx0s9">
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_22948"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>function</emu-t>
<emu-nt params="?Yield, ?Await" id="_ref_22949"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="~Yield, +Await" id="_ref_22950"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22951"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="_vbcugdo" constraints="+Default" id="prod-TaHP58mu"><emu-constraints>[+Default]</emu-constraints>
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_22952"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt params="~Yield, +Await" id="_ref_22953"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22954"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncFunctionExpression" id="prod-AsyncFunctionExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="mviccgpw" id="prod-LFCRNt3l">
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_22955"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>function</emu-t>
<emu-nt params="~Yield, +Await" optional="" id="_ref_22956"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[~Yield, +Await]</emu-params><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="~Yield, +Await" id="_ref_22957"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22958"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncMethod" params="Yield, Await" id="prod-AsyncMethod">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tzooi3sy" id="prod-80co-gZ6">
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_22959"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-nt params="?Yield, ?Await" id="_ref_22960"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt params="~Yield, +Await" id="_ref_22961"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22962"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncFunctionBody" id="prod-AsyncFunctionBody">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="j_tcfidx" id="prod-LKwCGkpu">
<emu-nt params="~Yield, +Await" id="_ref_22963"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AwaitExpression" params="Yield" id="prod-AwaitExpression">
<emu-nt params="Yield"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a><emu-mods><emu-params>[Yield]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="wzxw5xwu" id="prod-daps6IoT">
<emu-t>await</emu-t>
<emu-nt params="?Yield, +Await" id="_ref_22964"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a><emu-mods><emu-params>[?Yield, +Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p><code>await</code> is parsed as a <emu-xref href="#sec-keywords-and-reserved-words" id="_ref_8222"><a href="ecmascript-language-lexical-grammar.html#sec-keywords-and-reserved-words">keyword</a></emu-xref> of an <emu-nt id="_ref_22965"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> when the <sub>[Await]</sub> parameter is present. The <sub>[Await]</sub> parameter is present in the top level of the following contexts, although the parameter may be absent in some contexts depending on the nonterminals, such as <emu-nt id="_ref_22966"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>:</p>
<ul>
<li>In an <emu-nt id="_ref_22967"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>.</li>
<li>In the <emu-nt id="_ref_22968"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> of an <emu-nt id="_ref_22969"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt>, <emu-nt id="_ref_22970"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>, <emu-nt id="_ref_22971"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt>, or <emu-nt id="_ref_22972"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>. <emu-nt id="_ref_22973"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> in this position is a Syntax error via <emu-xref href="#sec-static-semantic-rules" id="_ref_8223"><a href="notational-conventions.html#sec-static-semantic-rules">static semantics</a></emu-xref>.</li>
<li>In a <emu-nt id="_ref_22974"><a href="ecmascript-language-scripts-and-modules.html#prod-Module">Module</a></emu-nt>.</li>
</ul>
<p>When <emu-nt id="_ref_22975"><a href="ecmascript-language-scripts-and-modules.html#prod-Script">Script</a></emu-nt> is the syntactic <emu-xref href="#sec-context-free-grammars" id="_ref_8224"><a href="notational-conventions.html#sec-context-free-grammars">goal symbol</a></emu-xref>, <code>await</code> may be parsed as an identifier when the <sub>[Await]</sub> parameter is absent. This includes the following contexts:</p>
<ul>
<li>Anywhere outside of an <emu-nt id="_ref_22976"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> or <emu-nt id="_ref_22977"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> of an <emu-nt id="_ref_22978"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt>, <emu-nt id="_ref_22979"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>, <emu-nt id="_ref_22980"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorDeclaration">AsyncGeneratorDeclaration</a></emu-nt>, or <emu-nt id="_ref_22981"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>.</li>
<li>In the <emu-nt id="_ref_22982"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> of a <emu-nt id="_ref_22983"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>, <emu-nt id="_ref_22984"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt>, or <emu-nt id="_ref_22985"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>.</li>
</ul>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>Unlike <emu-nt id="_ref_22986"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt>, it is a Syntax Error to omit the operand of an <emu-nt id="_ref_22987"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt>. You must await something.</p>
</div></emu-note>
<emu-clause id="sec-async-function-definitions-static-semantics-early-errors">
<h1><span class="secnum">15.8.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="AsyncMethod" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cfy3_9l8">
<emu-t>async</emu-t>
<emu-nt id="_ref_22988"><a href="ecmascript-language-functions-and-classes.html#prod-ClassElementName">ClassElementName</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22989"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_22990"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_8225"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_22991"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_8226"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_22992"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> is <emu-val>false</emu-val>.</li>
<li>It is a Syntax Error if <emu-xref aoid="HasDirectSuper" id="_ref_8227"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hasdirectsuper">HasDirectSuper</a></emu-xref> of <emu-nt id="_ref_22993"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncMethod">AsyncMethod</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_22994"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8228"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_22995"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_8229"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_22996"><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8230"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_22997"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>.</li>
</ul>
<emu-grammar><emu-production name="AsyncFunctionDeclaration">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4mmt35rm">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-nt id="_ref_22998"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_22999"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_23000"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
<emu-rhs a="agdmcdye">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23001"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_23002"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncFunctionExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1_djgdhl">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-nt optional="" id="_ref_23003"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_23004"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_23005"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>It is a Syntax Error if <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_8231"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_23006"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_8232"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_23007"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> is <emu-val>false</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_23008"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8233"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23009"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>If <emu-xref aoid="IsStrict" id="_ref_8234"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<emu-nt id="_ref_23010"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>) is <emu-val>true</emu-val>, the Early Error rules for <emu-grammar><emu-production name="UniqueFormalParameters" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-UniqueFormalParameters">UniqueFormalParameters</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ahjg9bb6"><emu-nt id="_ref_23011"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar> are applied.</li>
<li>If <emu-nt id="_ref_23012"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> is present and <emu-xref aoid="IsStrict" id="_ref_8235"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<emu-nt id="_ref_23013"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>) is <emu-val>true</emu-val>, it is a Syntax Error if the <emu-xref aoid="StringValue" id="_ref_8236"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23014"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> is either <emu-val>"eval"</emu-val> or <emu-val>"arguments"</emu-val>.</li>
<li>It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_8237"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23015"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8238"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23016"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_23017"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8239"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23018"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_23019"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8240"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23020"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_23021"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8241"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23022"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_23023"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8242"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23024"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt> is <emu-val>true</emu-val>.</li>
</ul>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiateasyncfunctionobject" oldids="sec-async-function-definitions-InstantiateFunctionObject" type="sdo" aoid="InstantiateAsyncFunctionObject"><span id="sec-async-function-definitions-InstantiateFunctionObject"></span>
<h1><span class="secnum">15.8.2</span> Runtime Semantics: InstantiateAsyncFunctionObject</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8243"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateAsyncFunctionObject takes arguments <var>env</var> (an <emu-xref href="#sec-environment-records" id="_ref_8244"><a href="executable-code-and-execution-contexts.html#sec-environment-records">Environment Record</a></emu-xref>) and <var>privateEnv</var> (a <emu-xref href="#privateenvironment-record" id="_ref_8245"><a href="executable-code-and-execution-contexts.html#privateenvironment-record">PrivateEnvironment Record</a></emu-xref> or <emu-val>null</emu-val>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_8246"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncFunctionDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4mmt35rm" id="prod-VjNDNC25">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-nt id="_ref_23025"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_23026"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_23027"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>name</var> be the <emu-xref aoid="StringValue" id="_ref_8247"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23028"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8248"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_23029"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_8249"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-async-function-prototype-properties" id="_ref_8250"><a href="control-abstraction-objects.html#sec-async-function-prototype-properties">%AsyncFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_23030"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_23031"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_8251"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <var>name</var>).</li><li>Return <var>F</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncFunctionDeclaration" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="agdmcdye" id="prod-QVYl6PrK">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23032"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_23033"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8252"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_23034"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionDeclaration">AsyncFunctionDeclaration</a></emu-nt>.</li><li>Let <var>F</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_8253"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-async-function-prototype-properties" id="_ref_8254"><a href="control-abstraction-objects.html#sec-async-function-prototype-properties">%AsyncFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_23035"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_23036"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_8255"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>F</var>, <emu-val>"default"</emu-val>).</li><li>Return <var>F</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiateasyncfunctionexpression" type="sdo" aoid="InstantiateAsyncFunctionExpression">
<h1><span class="secnum">15.8.3</span> Runtime Semantics: InstantiateAsyncFunctionExpression</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8256"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateAsyncFunctionExpression takes optional argument <var>name</var> (a <emu-xref href="#property-key" id="_ref_8257"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or a <emu-xref href="#sec-private-names" id="_ref_8258"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_8259"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncFunctionExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="agdmcdye" id="prod-3RN98Vrc">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23037"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_23038"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>name</var> is not present, set <var>name</var> to <emu-val>""</emu-val>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_8260"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_8261"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8262"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_23039"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_8263"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-async-function-prototype-properties" id="_ref_8264"><a href="control-abstraction-objects.html#sec-async-function-prototype-properties">%AsyncFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_23040"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_23041"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_8265"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncFunctionExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="4mmt35rm" id="prod-iEhgnbem">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-nt id="_ref_23042"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_23043"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_23044"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_8266"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: <var>name</var> is not present.</li><li>Set <var>name</var> to the <emu-xref aoid="StringValue" id="_ref_8267"><a href="ecmascript-language-expressions.html#sec-static-semantics-stringvalue">StringValue</a></emu-xref> of <emu-nt id="_ref_23045"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt>.</li><li>Let <var>outerEnv</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_8268"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>funcEnv</var> be <emu-xref aoid="NewDeclarativeEnvironment" id="_ref_8269"><a href="executable-code-and-execution-contexts.html#sec-newdeclarativeenvironment">NewDeclarativeEnvironment</a></emu-xref>(<var>outerEnv</var>).</li><li>Perform !&nbsp;<var>funcEnv</var>.<emu-xref aoid="CreateImmutableBinding" id="_ref_8270"><a href="executable-code-and-execution-contexts.html#abstract-createimmutablebinding">CreateImmutableBinding</a></emu-xref>(<var>name</var>, <emu-val>false</emu-val>).</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_8271"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8272"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_23046"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_8273"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-async-function-prototype-properties" id="_ref_8274"><a href="control-abstraction-objects.html#sec-async-function-prototype-properties">%AsyncFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <emu-nt id="_ref_23047"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>, <emu-nt id="_ref_23048"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>, <emu-const>non-lexical-this</emu-const>, <var>funcEnv</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_8275"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Perform !&nbsp;<var>funcEnv</var>.<emu-xref aoid="InitializeBinding" id="_ref_8276"><a href="executable-code-and-execution-contexts.html#abstract-initializebinding">InitializeBinding</a></emu-xref>(<var>name</var>, <var>closure</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>The <emu-nt id="_ref_23049"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in an <emu-nt id="_ref_23050"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt> can be referenced from inside the <emu-nt id="_ref_23051"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>'s <emu-nt id="_ref_23052"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> to allow the function to call itself recursively. However, unlike in a <emu-nt id="_ref_23053"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>, the <emu-nt id="_ref_23054"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a></emu-nt> in a <emu-nt id="_ref_23055"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt> cannot be referenced from and does not affect the scope enclosing the <emu-nt id="_ref_23056"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-runtime-semantics-evaluateasyncfunctionbody" oldids="sec-async-function-definitions-EvaluateBody" type="sdo" aoid="EvaluateAsyncFunctionBody"><span id="sec-async-function-definitions-EvaluateBody"></span>
<h1><span class="secnum">15.8.4</span> Runtime Semantics: EvaluateAsyncFunctionBody</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8277"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> EvaluateAsyncFunctionBody takes arguments <var>functionObject</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_8278"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8279"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-ecmascript-language-types" id="_ref_8280"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8281"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncFunctionBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iqzbkm-h" id="prod-jL__NzW5"><emu-nt id="_ref_23057"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>promiseCapability</var> be !&nbsp;<emu-xref aoid="NewPromiseCapability" id="_ref_8282"><a href="control-abstraction-objects.html#sec-newpromisecapability">NewPromiseCapability</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_8283"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>).</li><li>Let <var>completion</var> be <emu-xref aoid="Completion" id="_ref_8284"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_8285"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" class="e-user-code">FunctionDeclarationInstantiation</a></emu-xref>(<var>functionObject</var>, <var>argumentsList</var>)).</li><li>If <var>completion</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8286"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_8287"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « <var>completion</var>.<var class="field">[[Value]]</var>&nbsp;»).</li></ol></li><li>Else,<ol><li>Perform <emu-xref aoid="AsyncFunctionStart" id="_ref_8288"><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations-async-function-start" class="e-user-code">AsyncFunctionStart</a></emu-xref>(<var>promiseCapability</var>, <emu-nt id="_ref_23058"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>).</li></ol></li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_8289"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Promise]]</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-async-function-definitions-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">15.8.5</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="AsyncFunctionExpression">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1_djgdhl" id="prod-o1t7r8mz">
<emu-t>async</emu-t>
<emu-t>function</emu-t>
<emu-nt optional="" id="_ref_23059"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>(</emu-t>
<emu-nt id="_ref_23060"><a href="ecmascript-language-functions-and-classes.html#prod-FormalParameters">FormalParameters</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>{</emu-t>
<emu-nt id="_ref_23061"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="InstantiateAsyncFunctionExpression" id="_ref_8290"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncfunctionexpression">InstantiateAsyncFunctionExpression</a></emu-xref> of <emu-nt id="_ref_23062"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AwaitExpression" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7ylag141" id="prod-AKHRjjan">
<emu-t>await</emu-t>
<emu-nt id="_ref_23063"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>exprRef</var> be ?&nbsp;<emu-xref aoid="Evaluation" id="_ref_8291"><a href="syntax-directed-operations.html#sec-evaluation" class="e-user-code">Evaluation</a></emu-xref> of <emu-nt id="_ref_23064"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>.</li><li>Let <var>value</var> be ?&nbsp;<emu-xref aoid="GetValue" id="_ref_8292"><a href="ecmascript-data-types-and-values.html#sec-getvalue" class="e-user-code">GetValue</a></emu-xref>(<var>exprRef</var>).</li><li>Return ?&nbsp;<emu-xref aoid="Await" id="_ref_8293"><a href="control-abstraction-objects.html#await" class="e-user-code">Await</a></emu-xref>(<var>value</var>).</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-async-arrow-function-definitions">
<h1><span class="secnum">15.9</span> Async Arrow Function Definitions</h1>
<h2>Syntax</h2>
<emu-grammar type="definition"><emu-production name="AsyncArrowFunction" params="In, Yield, Await" id="prod-AsyncArrowFunction">
<emu-nt params="In, Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a><emu-mods><emu-params>[In, Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="u1dc5ef3" id="prod-YIoJOc1p">
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_23065"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-nt params="?Yield" id="_ref_23066"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a><emu-mods><emu-params>[?Yield]</emu-params></emu-mods></emu-nt>
<emu-gann>[no <emu-nt id="_ref_23067"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>=&gt;</emu-t>
<emu-nt params="?In" id="_ref_23068"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a><emu-mods><emu-params>[?In]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="callcover" id="prod-WTX_aban">
<emu-nt params="?Yield, ?Await" id="_ref_23069"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-gann>[no <emu-nt id="_ref_23070"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-t>=&gt;</emu-t>
<emu-nt params="?In" id="_ref_23071"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a><emu-mods><emu-params>[?In]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AsyncConciseBody" params="In" id="prod-AsyncConciseBody">
<emu-nt params="In"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a><emu-mods><emu-params>[In]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bpu3_ipt" id="prod-Dfs5WPuP">
<emu-gann>[lookahead ≠ <emu-t>{</emu-t>]</emu-gann>
<emu-nt params="?In, +Await" id="_ref_23072"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a><emu-mods><emu-params>[?In, +Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
<emu-rhs a="bm-b5ose" id="prod-Kq4Uu2cU">
<emu-t>{</emu-t>
<emu-nt id="_ref_23073"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="AsyncArrowBindingIdentifier" params="Yield" id="prod-AsyncArrowBindingIdentifier">
<emu-nt params="Yield"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a><emu-mods><emu-params>[Yield]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yuozsg2r" id="prod-I7oDJnBY">
<emu-nt params="?Yield, +Await" id="_ref_23074"><a href="ecmascript-language-expressions.html#prod-BindingIdentifier">BindingIdentifier</a><emu-mods><emu-params>[?Yield, +Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="CoverCallExpressionAndAsyncArrowHead" params="Yield, Await" id="prod-CoverCallExpressionAndAsyncArrowHead">
<emu-nt params="Yield, Await"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a><emu-mods><emu-params>[Yield, Await]</emu-params></emu-mods></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="90e-xzcw" id="prod-HT-vtkeW">
<emu-nt params="?Yield, ?Await" id="_ref_23075"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
<emu-nt params="?Yield, ?Await" id="_ref_23076"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a><emu-mods><emu-params>[?Yield, ?Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<h2>Supplemental Syntax</h2>
<p>
When processing an instance of the production<br>
<emu-grammar><emu-production name="AsyncArrowFunction" collapsed="" class=" inline">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="auwv8gbh">
<emu-nt id="_ref_23077"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_23078"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar><br>
the interpretation of <emu-nt id="_ref_23079"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt> is refined using the following grammar:
</p>
<emu-grammar type="definition"><emu-production name="AsyncArrowHead" id="prod-AsyncArrowHead">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowHead">AsyncArrowHead</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ydfl_ghb">
<emu-t>async</emu-t>
<emu-gann>[no <emu-nt id="_ref_23080"><a href="ecmascript-language-lexical-grammar.html#prod-LineTerminator">LineTerminator</a></emu-nt> here]</emu-gann>
<emu-nt params="~Yield, +Await" id="_ref_23081"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFormalParameters">ArrowFormalParameters</a><emu-mods><emu-params>[~Yield, +Await]</emu-params></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-clause id="sec-async-arrow-function-definitions-static-semantics-early-errors">
<h1><span class="secnum">15.9.1</span> Static Semantics: Early Errors</h1>
<emu-grammar><emu-production name="AsyncArrowFunction" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dqxgopsb">
<emu-t>async</emu-t>
<emu-nt id="_ref_23082"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_23083"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li>It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_8294"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23084"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8295"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23085"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>.</li>
</ul>
<emu-grammar><emu-production name="AsyncArrowFunction" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="auwv8gbh">
<emu-nt id="_ref_23086"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_23087"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<ul>
<li><emu-nt id="_ref_23088"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt> <emu-xref href="#must-cover" id="_ref_8296"><a href="notational-conventions.html#must-cover">must cover</a></emu-xref> an <emu-nt id="_ref_23089"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowHead">AsyncArrowHead</a></emu-nt>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_23090"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8297"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23091"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if <emu-nt id="_ref_23092"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt> <emu-xref aoid="Contains" id="_ref_8298"><a href="syntax-directed-operations.html#sec-static-semantics-contains">Contains</a></emu-xref> <emu-nt id="_ref_23093"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt> is <emu-val>true</emu-val>.</li>
<li>It is a Syntax Error if any element of the <emu-xref aoid="BoundNames" id="_ref_8299"><a href="syntax-directed-operations.html#sec-static-semantics-boundnames">BoundNames</a></emu-xref> of <emu-nt id="_ref_23094"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt> also occurs in the <emu-xref aoid="LexicallyDeclaredNames" id="_ref_8300"><a href="syntax-directed-operations.html#sec-static-semantics-lexicallydeclarednames">LexicallyDeclaredNames</a></emu-xref> of <emu-nt id="_ref_23095"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>.</li>
<li>It is a Syntax Error if <emu-xref aoid="AsyncConciseBodyContainsUseStrict" id="_ref_8301"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-asyncconcisebodycontainsusestrict">AsyncConciseBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_23096"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt> is <emu-val>true</emu-val> and <emu-xref aoid="IsSimpleParameterList" id="_ref_8302"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-issimpleparameterlist">IsSimpleParameterList</a></emu-xref> of <emu-nt id="_ref_23097"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt> is <emu-val>false</emu-val>.</li>
</ul>
</emu-clause>
<emu-clause id="sec-static-semantics-asyncconcisebodycontainsusestrict" oldids="sec-async-arrow-function-definitions-static-semantics-containsusestrict" type="sdo" aoid="AsyncConciseBodyContainsUseStrict"><span id="sec-async-arrow-function-definitions-static-semantics-containsusestrict"></span>
<h1><span class="secnum">15.9.2</span> Static Semantics: AsyncConciseBodyContainsUseStrict</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8303"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> AsyncConciseBodyContainsUseStrict takes no arguments and returns a Boolean. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncConciseBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="39f4t7jo" id="prod-ua51hPgJ"><emu-nt id="_ref_23098"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncConciseBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="bm-b5ose" id="prod-NdVhlp_L">
<emu-t>{</emu-t>
<emu-nt id="_ref_23099"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="FunctionBodyContainsUseStrict" id="_ref_8304"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-functionbodycontainsusestrict">FunctionBodyContainsUseStrict</a></emu-xref> of <emu-nt id="_ref_23100"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-evaluateasyncconcisebody" oldids="sec-async-arrow-function-definitions-EvaluateBody" type="sdo" aoid="EvaluateAsyncConciseBody"><span id="sec-async-arrow-function-definitions-EvaluateBody"></span>
<h1><span class="secnum">15.9.3</span> Runtime Semantics: EvaluateAsyncConciseBody</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8305"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> EvaluateAsyncConciseBody takes arguments <var>functionObject</var> (an ECMAScript <emu-xref href="#function-object" id="_ref_8306"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>) and <var>argumentsList</var> (a <emu-xref href="#sec-list-and-record-specification-type" id="_ref_8307"><a href="ecmascript-data-types-and-values.html#sec-list-and-record-specification-type">List</a></emu-xref> of <emu-xref href="#sec-ecmascript-language-types" id="_ref_8308"><a href="ecmascript-data-types-and-values.html#sec-ecmascript-language-types">ECMAScript language values</a></emu-xref>) and returns a <emu-xref href="#sec-completion-record-specification-type" id="_ref_8309"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">return completion</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncConciseBody" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="39f4t7jo" id="prod-NeT6IfHf"><emu-nt id="_ref_23101"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>promiseCapability</var> be !&nbsp;<emu-xref aoid="NewPromiseCapability" id="_ref_8310"><a href="control-abstraction-objects.html#sec-newpromisecapability">NewPromiseCapability</a></emu-xref>(<emu-xref href="#sec-promise-constructor" id="_ref_8311"><a href="control-abstraction-objects.html#sec-promise-constructor">%Promise%</a></emu-xref>).</li><li>Let <var>completion</var> be <emu-xref aoid="Completion" id="_ref_8312"><a href="notational-conventions.html#sec-completion-ao">Completion</a></emu-xref>(<emu-xref aoid="FunctionDeclarationInstantiation" id="_ref_8313"><a href="ordinary-and-exotic-objects-behaviours.html#sec-functiondeclarationinstantiation" class="e-user-code">FunctionDeclarationInstantiation</a></emu-xref>(<var>functionObject</var>, <var>argumentsList</var>)).</li><li>If <var>completion</var> is an <emu-xref href="#sec-completion-record-specification-type" id="_ref_8314"><a href="ecmascript-data-types-and-values.html#sec-completion-record-specification-type">abrupt completion</a></emu-xref>, then<ol><li>Perform !&nbsp;<emu-xref aoid="Call" id="_ref_8315"><a href="abstract-operations.html#sec-call">Call</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Reject]]</var>, <emu-val>undefined</emu-val>, « <var>completion</var>.<var class="field">[[Value]]</var>&nbsp;»).</li></ol></li><li>Else,<ol><li>Perform <emu-xref aoid="AsyncFunctionStart" id="_ref_8316"><a href="control-abstraction-objects.html#sec-async-functions-abstract-operations-async-function-start" class="e-user-code">AsyncFunctionStart</a></emu-xref>(<var>promiseCapability</var>, <emu-nt id="_ref_23102"><a href="ecmascript-language-functions-and-classes.html#prod-ExpressionBody">ExpressionBody</a></emu-nt>).</li></ol></li><li>Return <emu-xref aoid="ReturnCompletion" id="_ref_8317"><a href="ecmascript-data-types-and-values.html#sec-returncompletion">ReturnCompletion</a></emu-xref>(<var>promiseCapability</var>.<var class="field">[[Promise]]</var>).</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-runtime-semantics-instantiateasyncarrowfunctionexpression" type="sdo" aoid="InstantiateAsyncArrowFunctionExpression">
<h1><span class="secnum">15.9.4</span> Runtime Semantics: InstantiateAsyncArrowFunctionExpression</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8318"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> InstantiateAsyncArrowFunctionExpression takes optional argument <var>name</var> (a <emu-xref href="#property-key" id="_ref_8319"><a href="ecmascript-data-types-and-values.html#property-key">property key</a></emu-xref> or a <emu-xref href="#sec-private-names" id="_ref_8320"><a href="ecmascript-data-types-and-values.html#sec-private-names">Private Name</a></emu-xref>) and returns an ECMAScript <emu-xref href="#function-object" id="_ref_8321"><a href="ecmascript-data-types-and-values.html#function-object">function object</a></emu-xref>. It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="AsyncArrowFunction" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dqxgopsb" id="prod-kBFLOl9Q">
<emu-t>async</emu-t>
<emu-nt id="_ref_23103"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_23104"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>name</var> is not present, set <var>name</var> to <emu-val>""</emu-val>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_8322"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_8323"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8324"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_23105"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt>.</li><li>Let <var>parameters</var> be <emu-nt id="_ref_23106"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a></emu-nt>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_8325"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-async-function-prototype-properties" id="_ref_8326"><a href="control-abstraction-objects.html#sec-async-function-prototype-properties">%AsyncFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <var>parameters</var>, <emu-nt id="_ref_23107"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>, <emu-const>lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_8327"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AsyncArrowFunction" collapsed="">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="auwv8gbh" id="prod-YQv2CZBp">
<emu-nt id="_ref_23108"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_23109"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <var>name</var> is not present, set <var>name</var> to <emu-val>""</emu-val>.</li><li>Let <var>env</var> be the LexicalEnvironment of the <emu-xref href="#running-execution-context" id="_ref_8328"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>.</li><li>Let <var>privateEnv</var> be the <emu-xref href="#running-execution-context" id="_ref_8329"><a href="executable-code-and-execution-contexts.html#running-execution-context">running execution context</a></emu-xref>'s PrivateEnvironment.</li><li>Let <var>sourceText</var> be the <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8330"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">source text matched by</a></emu-xref> <emu-nt id="_ref_23110"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt>.</li><li>Let <var>head</var> be the <emu-nt id="_ref_23111"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowHead">AsyncArrowHead</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_8331"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_23112"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>.</li><li>Let <var>parameters</var> be the <emu-nt id="_ref_23113"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFormalParameters">ArrowFormalParameters</a></emu-nt> of <var>head</var>.</li><li>Let <var>closure</var> be <emu-xref aoid="OrdinaryFunctionCreate" id="_ref_8332"><a href="ordinary-and-exotic-objects-behaviours.html#sec-ordinaryfunctioncreate">OrdinaryFunctionCreate</a></emu-xref>(<emu-xref href="#sec-async-function-prototype-properties" id="_ref_8333"><a href="control-abstraction-objects.html#sec-async-function-prototype-properties">%AsyncFunction.prototype%</a></emu-xref>, <var>sourceText</var>, <var>parameters</var>, <emu-nt id="_ref_23114"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>, <emu-const>lexical-this</emu-const>, <var>env</var>, <var>privateEnv</var>).</li><li>Perform <emu-xref aoid="SetFunctionName" id="_ref_8334"><a href="ordinary-and-exotic-objects-behaviours.html#sec-setfunctionname">SetFunctionName</a></emu-xref>(<var>closure</var>, <var>name</var>).</li><li>Return <var>closure</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-async-arrow-function-definitions-runtime-semantics-evaluation" type="sdo">
<h1><span class="secnum">15.9.5</span> Runtime Semantics: Evaluation</h1>
<emu-grammar><emu-production name="AsyncArrowFunction">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dqxgopsb" id="prod---LSw2Ps">
<emu-t>async</emu-t>
<emu-nt id="_ref_23115"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowBindingIdentifier">AsyncArrowBindingIdentifier</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_23116"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>
</emu-rhs>
<emu-rhs a="auwv8gbh" id="prod-vJszVz5M">
<emu-nt id="_ref_23117"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>
<emu-t>=&gt;</emu-t>
<emu-nt id="_ref_23118"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="InstantiateAsyncArrowFunctionExpression" id="_ref_8335"><a href="ecmascript-language-functions-and-classes.html#sec-runtime-semantics-instantiateasyncarrowfunctionexpression">InstantiateAsyncArrowFunctionExpression</a></emu-xref> of <emu-nt id="_ref_23119"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt>.</li></ol></emu-alg>
</emu-clause>
</emu-clause>
<emu-clause id="sec-tail-position-calls">
<h1><span class="secnum">15.10</span> Tail Position Calls</h1>
<emu-clause id="sec-isintailposition" type="abstract operation" aoid="IsInTailPosition">
<h1><span class="secnum">15.10.1</span> Static Semantics: IsInTailPosition ( <var>call</var> )</h1>
<p>The abstract operation IsInTailPosition takes argument <var>call</var> (a <emu-nt id="_ref_23120"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8336"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, a <emu-nt id="_ref_23121"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8337"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, or an <emu-nt id="_ref_23122"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8338"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns a Boolean. It performs the following steps when called:</p>
<emu-alg><ol><li>If <emu-xref aoid="IsStrict" id="_ref_8339"><a href="ecmascript-language-source-code.html#sec-isstrict">IsStrict</a></emu-xref>(<var>call</var>) is <emu-val>false</emu-val>, return <emu-val>false</emu-val>.</li><li>If <var>call</var> is not contained within a <emu-nt id="_ref_23123"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, a <emu-nt id="_ref_23124"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt>, or an <emu-nt id="_ref_23125"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>, return <emu-val>false</emu-val>.</li><li>Let <var>body</var> be the <emu-nt id="_ref_23126"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt>, <emu-nt id="_ref_23127"><a href="ecmascript-language-functions-and-classes.html#prod-ConciseBody">ConciseBody</a></emu-nt>, or <emu-nt id="_ref_23128"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt> that most closely contains <var>call</var>.</li><li>If <var>body</var> is the <emu-nt id="_ref_23129"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> of a <emu-nt id="_ref_23130"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorBody">GeneratorBody</a></emu-nt>, return <emu-val>false</emu-val>.</li><li>If <var>body</var> is the <emu-nt id="_ref_23131"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> of an <emu-nt id="_ref_23132"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionBody">AsyncFunctionBody</a></emu-nt>, return <emu-val>false</emu-val>.</li><li>If <var>body</var> is the <emu-nt id="_ref_23133"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionBody">FunctionBody</a></emu-nt> of an <emu-nt id="_ref_23134"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorBody">AsyncGeneratorBody</a></emu-nt>, return <emu-val>false</emu-val>.</li><li>If <var>body</var> is an <emu-nt id="_ref_23135"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncConciseBody">AsyncConciseBody</a></emu-nt>, return <emu-val>false</emu-val>.</li><li>Return the result of <emu-xref aoid="HasCallInTailPosition" id="_ref_8340"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <var>body</var> with argument <var>call</var>.</li></ol></emu-alg>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>Tail Position calls are only defined in <emu-xref href="#sec-strict-mode-code" id="_ref_8341"><a href="ecmascript-language-source-code.html#sec-strict-mode-code">strict mode code</a></emu-xref> because of a common non-standard language extension (see <emu-xref href="#sec-addrestrictedfunctionproperties" id="_ref_472"><a href="ordinary-and-exotic-objects-behaviours.html#sec-addrestrictedfunctionproperties">10.2.4</a></emu-xref>) that enables observation of the chain of caller contexts.</p>
</div></emu-note>
</emu-clause>
<emu-clause id="sec-static-semantics-hascallintailposition" type="sdo" oldids="sec-statement-rules,sec-expression-rules" aoid="HasCallInTailPosition"><span id="sec-expression-rules"></span><span id="sec-statement-rules"></span>
<h1><span class="secnum">15.10.2</span> Static Semantics: HasCallInTailPosition</h1>
<p>The <emu-xref href="#sec-algorithm-conventions-syntax-directed-operations" id="_ref_8342"><a href="notational-conventions.html#sec-algorithm-conventions-syntax-directed-operations">syntax-directed operation</a></emu-xref> HasCallInTailPosition takes argument <var>call</var> (a <emu-nt id="_ref_23136"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8343"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, a <emu-nt id="_ref_23137"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8344"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, or an <emu-nt id="_ref_23138"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-xref href="#sec-syntactic-grammar" id="_ref_8345"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>) and returns a Boolean.</p>
<emu-note><span class="note">Note 1</span><div class="note-contents">
<p><var>call</var> is a <emu-xref href="#sec-syntactic-grammar" id="_ref_8346"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref> that represents a specific range of source text. When the following algorithms compare <var>call</var> to another <emu-xref href="#sec-syntactic-grammar" id="_ref_8347"><a href="notational-conventions.html#sec-syntactic-grammar">Parse Node</a></emu-xref>, it is a test of whether they represent the same source text.</p>
</div></emu-note>
<emu-note><span class="note">Note 2</span><div class="note-contents">
<p>A potential tail position call that is immediately followed by return <emu-xref aoid="GetValue" id="_ref_8348"><a href="ecmascript-data-types-and-values.html#sec-getvalue">GetValue</a></emu-xref> of the call result is also a possible tail position call. A function call cannot return a <emu-xref href="#sec-reference-record-specification-type" id="_ref_8349"><a href="ecmascript-data-types-and-values.html#sec-reference-record-specification-type">Reference Record</a></emu-xref>, so such a <emu-xref aoid="GetValue" id="_ref_8350"><a href="ecmascript-data-types-and-values.html#sec-getvalue">GetValue</a></emu-xref> operation will always return the same value as the actual function call result.</p>
</div></emu-note>
<p>It is defined piecewise over the following productions:</p>
<emu-grammar><emu-production name="StatementList" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dbrzeh7l" id="prod-F5ertWhw">
<emu-nt id="_ref_23139"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt>
<emu-nt id="_ref_23140"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-xref aoid="HasCallInTailPosition" id="_ref_8351"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23141"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> with argument <var>call</var>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8352"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23142"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="FunctionStatementList">
<emu-nt><a href="ecmascript-language-functions-and-classes.html#prod-FunctionStatementList">FunctionStatementList</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="n7nathbb" id="prod-kIL-80Vx">
<emu-gann>[empty]</emu-gann>
</emu-rhs>
</emu-production>
<emu-production name="StatementListItem">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-StatementListItem">StatementListItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1vn3ibwe" id="prod-pXbgumyQ">
<emu-nt id="_ref_23143"><a href="ecmascript-language-statements-and-declarations.html#prod-Declaration">Declaration</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="Statement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iwwn8atx" id="prod-lv2KeoQI">
<emu-nt id="_ref_23144"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableStatement">VariableStatement</a></emu-nt>
</emu-rhs>
<emu-rhs a="cziqu-45" id="prod-6SIyyGLy">
<emu-nt id="_ref_23145"><a href="ecmascript-language-statements-and-declarations.html#prod-EmptyStatement">EmptyStatement</a></emu-nt>
</emu-rhs>
<emu-rhs a="gsqkt2bv" id="prod-J7MnLCgE">
<emu-nt id="_ref_23146"><a href="ecmascript-language-statements-and-declarations.html#prod-ExpressionStatement">ExpressionStatement</a></emu-nt>
</emu-rhs>
<emu-rhs a="hx0ynljx" id="prod-ptINeFLS">
<emu-nt id="_ref_23147"><a href="ecmascript-language-statements-and-declarations.html#prod-ContinueStatement">ContinueStatement</a></emu-nt>
</emu-rhs>
<emu-rhs a="q4uv-sm3" id="prod-g-hVFlsz">
<emu-nt id="_ref_23148"><a href="ecmascript-language-statements-and-declarations.html#prod-BreakStatement">BreakStatement</a></emu-nt>
</emu-rhs>
<emu-rhs a="hntake-o" id="prod-5GevwvIH">
<emu-nt id="_ref_23149"><a href="ecmascript-language-statements-and-declarations.html#prod-ThrowStatement">ThrowStatement</a></emu-nt>
</emu-rhs>
<emu-rhs a="iseu28qi" id="prod-h7wdVS_8">
<emu-nt id="_ref_23150"><a href="ecmascript-language-statements-and-declarations.html#prod-DebuggerStatement">DebuggerStatement</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="Block">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-Block">Block</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-XaV9YBUk">
<emu-t>{</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="ReturnStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ReturnStatement">ReturnStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="cykzgrgr" id="prod-1dE_5B3o">
<emu-t>return</emu-t>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="LabelledItem">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-LabelledItem">LabelledItem</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-nqupnlb" id="prod-vYyfX_-t">
<emu-nt id="_ref_23151"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionDeclaration">FunctionDeclaration</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ForInOfStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ForInOfStatement">ForInOfStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jqzgi_en" id="prod-UxPxs8d_">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23152"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>of</emu-t>
<emu-nt id="_ref_23153"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23154"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
<emu-rhs a="7m-adytu" id="prod-SXpahyTC">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-t>var</emu-t>
<emu-nt id="_ref_23155"><a href="ecmascript-language-statements-and-declarations.html#prod-ForBinding">ForBinding</a></emu-nt>
<emu-t>of</emu-t>
<emu-nt id="_ref_23156"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23157"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
<emu-rhs a="b3wzboyu" id="prod-wCPQQMFx">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23158"><a href="ecmascript-language-statements-and-declarations.html#prod-ForDeclaration">ForDeclaration</a></emu-nt>
<emu-t>of</emu-t>
<emu-nt id="_ref_23159"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23160"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="CaseBlock">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-CaseBlock">CaseBlock</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="gbpaspne" id="prod-xbbhi7s4">
<emu-t>{</emu-t>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="IfStatement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-IfStatement">IfStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fuhqe2xq" id="prod-Ko_HI6eh">
<emu-t>if</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23161"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23162"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
<emu-t>else</emu-t>
<emu-nt id="_ref_23163"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-xref aoid="HasCallInTailPosition" id="_ref_8353"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of the first <emu-nt id="_ref_23164"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt> with argument <var>call</var>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8354"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of the second <emu-nt id="_ref_23165"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="IfStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-IfStatement">IfStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="9ogvciaf" id="prod-y6CLSCid">
<emu-t>if</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23166"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23167"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="DoWhileStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-DoWhileStatement">DoWhileStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jocmqoht" id="prod-S9zGaOvQ">
<emu-t>do</emu-t>
<emu-nt id="_ref_23168"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
<emu-t>while</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23169"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
<emu-production name="WhileStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-WhileStatement">WhileStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="92j78-b5" id="prod-w8fD4eQR">
<emu-t>while</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23170"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23171"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ForStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ForStatement">ForStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="_do88got" id="prod-5zL2KF3R">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-nt optional="" id="_ref_23172"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>;</emu-t>
<emu-nt optional="" id="_ref_23173"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>;</emu-t>
<emu-nt optional="" id="_ref_23174"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23175"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
<emu-rhs a="sodmtko8" id="prod-NaXtYhbG">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-t>var</emu-t>
<emu-nt id="_ref_23176"><a href="ecmascript-language-statements-and-declarations.html#prod-VariableDeclarationList">VariableDeclarationList</a></emu-nt>
<emu-t>;</emu-t>
<emu-nt optional="" id="_ref_23177"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>;</emu-t>
<emu-nt optional="" id="_ref_23178"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23179"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
<emu-rhs a="k8b-ryxj" id="prod-dAMDtYUP">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23180"><a href="ecmascript-language-statements-and-declarations.html#prod-LexicalDeclaration">LexicalDeclaration</a></emu-nt>
<emu-nt optional="" id="_ref_23181"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>;</emu-t>
<emu-nt optional="" id="_ref_23182"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23183"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ForInOfStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ForInOfStatement">ForInOfStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v1ibcd1w" id="prod-bQapuc86">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23184"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt id="_ref_23185"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23186"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
<emu-rhs a="7pgjrcn-" id="prod-MjZJhgTY">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-t>var</emu-t>
<emu-nt id="_ref_23187"><a href="ecmascript-language-statements-and-declarations.html#prod-ForBinding">ForBinding</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt id="_ref_23188"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23189"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
<emu-rhs a="jzctgxkp" id="prod-1PyeafOE">
<emu-t>for</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23190"><a href="ecmascript-language-statements-and-declarations.html#prod-ForDeclaration">ForDeclaration</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt id="_ref_23191"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23192"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="WithStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-WithStatement">WithStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i70kview" id="prod-CNjVnvTr">
<emu-t>with</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23193"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23194"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8355"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23195"><a href="ecmascript-language-statements-and-declarations.html#prod-Statement">Statement</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="LabelledStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-LabelledStatement">LabelledStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ubbvtbun" id="prod-EJFE0gRP">
<emu-nt id="_ref_23196"><a href="ecmascript-language-expressions.html#prod-LabelIdentifier">LabelIdentifier</a></emu-nt>
<emu-t>:</emu-t>
<emu-nt id="_ref_23197"><a href="ecmascript-language-statements-and-declarations.html#prod-LabelledItem">LabelledItem</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8356"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23198"><a href="ecmascript-language-statements-and-declarations.html#prod-LabelledItem">LabelledItem</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ReturnStatement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-ReturnStatement">ReturnStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tpdzx2lh" id="prod-dyDXTOIV">
<emu-t>return</emu-t>
<emu-nt id="_ref_23199"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>;</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8357"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23200"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="SwitchStatement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-SwitchStatement">SwitchStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uvrp_hkw" id="prod-5fN7_rAP">
<emu-t>switch</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23201"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23202"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseBlock">CaseBlock</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8358"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23203"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseBlock">CaseBlock</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="CaseBlock" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-CaseBlock">CaseBlock</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ududlhou" id="prod-qQu0U2NT">
<emu-t>{</emu-t>
<emu-nt optional="" id="_ref_23204"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-nt id="_ref_23205"><a href="ecmascript-language-statements-and-declarations.html#prod-DefaultClause">DefaultClause</a></emu-nt>
<emu-nt optional="" id="_ref_23206"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
<emu-t>}</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-val>false</emu-val>.</li><li>If the first <emu-nt id="_ref_23207"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a></emu-nt> is present, set <var>has</var> to <emu-xref aoid="HasCallInTailPosition" id="_ref_8359"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of the first <emu-nt id="_ref_23208"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a></emu-nt> with argument <var>call</var>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Set <var>has</var> to <emu-xref aoid="HasCallInTailPosition" id="_ref_8360"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23209"><a href="ecmascript-language-statements-and-declarations.html#prod-DefaultClause">DefaultClause</a></emu-nt> with argument <var>call</var>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>If the second <emu-nt id="_ref_23210"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a></emu-nt> is present, set <var>has</var> to <emu-xref aoid="HasCallInTailPosition" id="_ref_8361"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of the second <emu-nt id="_ref_23211"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a></emu-nt> with argument <var>call</var>.</li><li>Return <var>has</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="CaseClauses" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="addji9rs" id="prod-NriAn6Ov">
<emu-nt id="_ref_23212"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a></emu-nt>
<emu-nt id="_ref_23213"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClause">CaseClause</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-xref aoid="HasCallInTailPosition" id="_ref_8362"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23214"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClauses">CaseClauses</a></emu-nt> with argument <var>call</var>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8363"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23215"><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClause">CaseClause</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="CaseClause" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-CaseClause">CaseClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="x20nmjyd" id="prod-E0jD9ho5">
<emu-t>case</emu-t>
<emu-nt id="_ref_23216"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>:</emu-t>
<emu-nt optional="" id="_ref_23217"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="DefaultClause" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-DefaultClause">DefaultClause</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="z4ihpgum" id="prod-VmaCE56t">
<emu-t>default</emu-t>
<emu-t>:</emu-t>
<emu-nt optional="" id="_ref_23218"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a><emu-mods><emu-opt>opt</emu-opt></emu-mods></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If <emu-nt id="_ref_23219"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> is present, return <emu-xref aoid="HasCallInTailPosition" id="_ref_8364"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23220"><a href="ecmascript-language-statements-and-declarations.html#prod-StatementList">StatementList</a></emu-nt> with argument <var>call</var>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="TryStatement" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-TryStatement">TryStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qhfov2lc" id="prod-osswrj81">
<emu-t>try</emu-t>
<emu-nt id="_ref_23221"><a href="ecmascript-language-statements-and-declarations.html#prod-Block">Block</a></emu-nt>
<emu-nt id="_ref_23222"><a href="ecmascript-language-statements-and-declarations.html#prod-Catch">Catch</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8365"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23223"><a href="ecmascript-language-statements-and-declarations.html#prod-Catch">Catch</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="TryStatement">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-TryStatement">TryStatement</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="xsakufa6" id="prod-Gpv9b_Iv">
<emu-t>try</emu-t>
<emu-nt id="_ref_23224"><a href="ecmascript-language-statements-and-declarations.html#prod-Block">Block</a></emu-nt>
<emu-nt id="_ref_23225"><a href="ecmascript-language-statements-and-declarations.html#prod-Finally">Finally</a></emu-nt>
</emu-rhs>
<emu-rhs a="gxlzfd5s" id="prod-fwryg5gk">
<emu-t>try</emu-t>
<emu-nt id="_ref_23226"><a href="ecmascript-language-statements-and-declarations.html#prod-Block">Block</a></emu-nt>
<emu-nt id="_ref_23227"><a href="ecmascript-language-statements-and-declarations.html#prod-Catch">Catch</a></emu-nt>
<emu-nt id="_ref_23228"><a href="ecmascript-language-statements-and-declarations.html#prod-Finally">Finally</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8366"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23229"><a href="ecmascript-language-statements-and-declarations.html#prod-Finally">Finally</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Catch" collapsed="">
<emu-nt><a href="ecmascript-language-statements-and-declarations.html#prod-Catch">Catch</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3ce8nhiw" id="prod-WuWbjiYu">
<emu-t>catch</emu-t>
<emu-t>(</emu-t>
<emu-nt id="_ref_23230"><a href="ecmascript-language-statements-and-declarations.html#prod-CatchParameter">CatchParameter</a></emu-nt>
<emu-t>)</emu-t>
<emu-nt id="_ref_23231"><a href="ecmascript-language-statements-and-declarations.html#prod-Block">Block</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8367"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23232"><a href="ecmascript-language-statements-and-declarations.html#prod-Block">Block</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="AssignmentExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="uglis9ea" id="prod-EisiYgar">
<emu-nt id="_ref_23233"><a href="ecmascript-language-functions-and-classes.html#prod-YieldExpression">YieldExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="k987eemp" id="prod-vU1F8zv6">
<emu-nt id="_ref_23234"><a href="ecmascript-language-functions-and-classes.html#prod-ArrowFunction">ArrowFunction</a></emu-nt>
</emu-rhs>
<emu-rhs a="a3kew9kn" id="prod-dfzrjfnA">
<emu-nt id="_ref_23235"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncArrowFunction">AsyncArrowFunction</a></emu-nt>
</emu-rhs>
<emu-rhs a="ijpo4eaq" id="prod-UQL2MJzG">
<emu-nt id="_ref_23236"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>=</emu-t>
<emu-nt id="_ref_23237"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="xzqhr---" id="prod-HJVm6lHU">
<emu-nt id="_ref_23238"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-nt id="_ref_23239"><a href="ecmascript-language-expressions.html#prod-AssignmentOperator">AssignmentOperator</a></emu-nt>
<emu-nt id="_ref_23240"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="devkzibl" id="prod-oNpXbeRs">
<emu-nt id="_ref_23241"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>&amp;&amp;=</emu-t>
<emu-nt id="_ref_23242"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="dt1frwiy" id="prod-TNQR4MPF">
<emu-nt id="_ref_23243"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>||=</emu-t>
<emu-nt id="_ref_23244"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="dbifpqxa" id="prod-ML4QjaEz">
<emu-nt id="_ref_23245"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>??=</emu-t>
<emu-nt id="_ref_23246"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="BitwiseANDExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="qq3twiws" id="prod-YGqkdmtG">
<emu-nt id="_ref_23247"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a></emu-nt>
<emu-t>&amp;</emu-t>
<emu-nt id="_ref_23248"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="BitwiseXORExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tgmxlg5x" id="prod-N6UlC2YT">
<emu-nt id="_ref_23249"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a></emu-nt>
<emu-t>^</emu-t>
<emu-nt id="_ref_23250"><a href="ecmascript-language-expressions.html#prod-BitwiseANDExpression">BitwiseANDExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="BitwiseORExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="aw36khwc" id="prod-xCUjATPv">
<emu-nt id="_ref_23251"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>
<emu-t>|</emu-t>
<emu-nt id="_ref_23252"><a href="ecmascript-language-expressions.html#prod-BitwiseXORExpression">BitwiseXORExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="EqualityExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dxo0lfgu" id="prod-slB6AVFT">
<emu-nt id="_ref_23253"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
<emu-t>==</emu-t>
<emu-nt id="_ref_23254"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="cn2twrby" id="prod--y8v2xFz">
<emu-nt id="_ref_23255"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
<emu-t>!=</emu-t>
<emu-nt id="_ref_23256"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="4hu79ipe" id="prod-3nwl9Xq9">
<emu-nt id="_ref_23257"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
<emu-t>===</emu-t>
<emu-nt id="_ref_23258"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="irptryux" id="prod-gkNFox60">
<emu-nt id="_ref_23259"><a href="ecmascript-language-expressions.html#prod-EqualityExpression">EqualityExpression</a></emu-nt>
<emu-t>!==</emu-t>
<emu-nt id="_ref_23260"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="RelationalExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0hbjkrqw" id="prod-moN-TY1a">
<emu-nt id="_ref_23261"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>&lt;</emu-t>
<emu-nt id="_ref_23262"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="gziyg7ut" id="prod-9RitMb2a">
<emu-nt id="_ref_23263"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>&gt;</emu-t>
<emu-nt id="_ref_23264"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="kcktdtrm" id="prod-Ov8fY5LR">
<emu-nt id="_ref_23265"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>&lt;=</emu-t>
<emu-nt id="_ref_23266"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="3cupp_tq" id="prod-Qjes4HD-">
<emu-nt id="_ref_23267"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>&gt;=</emu-t>
<emu-nt id="_ref_23268"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="1ec9rmdp" id="prod-a-QEMe-f">
<emu-nt id="_ref_23269"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>instanceof</emu-t>
<emu-nt id="_ref_23270"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="9mtjpkmx" id="prod-K4Kmo-4o">
<emu-nt id="_ref_23271"><a href="ecmascript-language-expressions.html#prod-RelationalExpression">RelationalExpression</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt id="_ref_23272"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="bfkxjj0f" id="prod-HF09HkQT">
<emu-nt id="_ref_23273"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
<emu-t>in</emu-t>
<emu-nt id="_ref_23274"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ShiftExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tg9tkm4d" id="prod-uY5on6s_">
<emu-nt id="_ref_23275"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
<emu-t>&lt;&lt;</emu-t>
<emu-nt id="_ref_23276"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="vimn88nj" id="prod-2EFbRVMb">
<emu-nt id="_ref_23277"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
<emu-t>&gt;&gt;</emu-t>
<emu-nt id="_ref_23278"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="n_furjdr" id="prod-DGTb9f0a">
<emu-nt id="_ref_23279"><a href="ecmascript-language-expressions.html#prod-ShiftExpression">ShiftExpression</a></emu-nt>
<emu-t>&gt;&gt;&gt;</emu-t>
<emu-nt id="_ref_23280"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="AdditiveExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="dkl7f70y" id="prod-NqWi91A3">
<emu-nt id="_ref_23281"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
<emu-t>+</emu-t>
<emu-nt id="_ref_23282"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="7gvefllu" id="prod-yLTyBgd3">
<emu-nt id="_ref_23283"><a href="ecmascript-language-expressions.html#prod-AdditiveExpression">AdditiveExpression</a></emu-nt>
<emu-t>-</emu-t>
<emu-nt id="_ref_23284"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="MultiplicativeExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="-5_iophl" id="prod-siUuH5zP">
<emu-nt id="_ref_23285"><a href="ecmascript-language-expressions.html#prod-MultiplicativeExpression">MultiplicativeExpression</a></emu-nt>
<emu-nt id="_ref_23286"><a href="ecmascript-language-expressions.html#prod-MultiplicativeOperator">MultiplicativeOperator</a></emu-nt>
<emu-nt id="_ref_23287"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="ExponentiationExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="0zbfzgb0" id="prod-QjBqEERx">
<emu-nt id="_ref_23288"><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt>
<emu-t>**</emu-t>
<emu-nt id="_ref_23289"><a href="ecmascript-language-expressions.html#prod-ExponentiationExpression">ExponentiationExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="UpdateExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UpdateExpression">UpdateExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="i_jjg0ex" id="prod-AxYNo76R">
<emu-nt id="_ref_23290"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>++</emu-t>
</emu-rhs>
<emu-rhs a="jr0tcoqg" id="prod-8wEdzYlR">
<emu-nt id="_ref_23291"><a href="ecmascript-language-expressions.html#prod-LeftHandSideExpression">LeftHandSideExpression</a></emu-nt>
<emu-t>--</emu-t>
</emu-rhs>
<emu-rhs a="vwgxygda" id="prod-DlZME4qQ">
<emu-t>++</emu-t>
<emu-nt id="_ref_23292"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="onrvwudi" id="prod-tSq265UP">
<emu-t>--</emu-t>
<emu-nt id="_ref_23293"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="UnaryExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="v9wiw5nl" id="prod-AObKG7bs">
<emu-t>delete</emu-t>
<emu-nt id="_ref_23294"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="5dgdjy7z" id="prod-bZ_A9_ek">
<emu-t>void</emu-t>
<emu-nt id="_ref_23295"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="qxosuesc" id="prod-wEjVGAri">
<emu-t>typeof</emu-t>
<emu-nt id="_ref_23296"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="o0kdmush" id="prod-qq9s9o6K">
<emu-t>+</emu-t>
<emu-nt id="_ref_23297"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="odzkxnu5" id="prod-i-bNI229">
<emu-t>-</emu-t>
<emu-nt id="_ref_23298"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="b9nqec7b" id="prod-qryce9Aj">
<emu-t>~</emu-t>
<emu-nt id="_ref_23299"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="ulcvcjyx" id="prod-U263_8yR">
<emu-t>!</emu-t>
<emu-nt id="_ref_23300"><a href="ecmascript-language-expressions.html#prod-UnaryExpression">UnaryExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="shlomml6" id="prod-tMRR2AUd">
<emu-nt id="_ref_23301"><a href="ecmascript-language-functions-and-classes.html#prod-AwaitExpression">AwaitExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="CallExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ljkqw-iw" id="prod-ErkBAfx1">
<emu-nt id="_ref_23302"><a href="ecmascript-language-expressions.html#prod-SuperCall">SuperCall</a></emu-nt>
</emu-rhs>
<emu-rhs a="kyx2iyhy" id="prod-MHB-4I6F">
<emu-nt id="_ref_23303"><a href="ecmascript-language-expressions.html#prod-ImportCall">ImportCall</a></emu-nt>
</emu-rhs>
<emu-rhs a="2u2urbmg" id="prod-tR1iepZf">
<emu-nt id="_ref_23304"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-t>[</emu-t>
<emu-nt id="_ref_23305"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="u6lsbvgu" id="prod-jkDZ--BF">
<emu-nt id="_ref_23306"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_23307"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="cysjk9wh" id="prod-qcy6aC3l">
<emu-nt id="_ref_23308"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_23309"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="NewExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="51p618ta" id="prod-wDQSEiH6">
<emu-t>new</emu-t>
<emu-nt id="_ref_23310"><a href="ecmascript-language-expressions.html#prod-NewExpression">NewExpression</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="MemberExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="a74xd7de" id="prod-O9zU8IeQ">
<emu-nt id="_ref_23311"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-t>[</emu-t>
<emu-nt id="_ref_23312"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="frbj984t" id="prod-pLKWI9AB">
<emu-nt id="_ref_23313"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_23314"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="x4tzletw" id="prod-hqYKqnVA">
<emu-nt id="_ref_23315"><a href="ecmascript-language-expressions.html#prod-SuperProperty">SuperProperty</a></emu-nt>
</emu-rhs>
<emu-rhs a="yb7id2be" id="prod-wTfT9w68">
<emu-nt id="_ref_23316"><a href="ecmascript-language-expressions.html#prod-MetaProperty">MetaProperty</a></emu-nt>
</emu-rhs>
<emu-rhs a="cfq-hbbx" id="prod-pXKW4iCP">
<emu-t>new</emu-t>
<emu-nt id="_ref_23317"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-nt id="_ref_23318"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
<emu-rhs a="0uk9afbi" id="prod-AGU05Shk">
<emu-nt id="_ref_23319"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_23320"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
<emu-production name="PrimaryExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="jo4mwtvh" id="prod-9Nj5RIni">
<emu-t>this</emu-t>
</emu-rhs>
<emu-rhs a="i2hxnrih" id="prod-_yZN8EJG">
<emu-nt id="_ref_23321"><a href="ecmascript-language-expressions.html#prod-IdentifierReference">IdentifierReference</a></emu-nt>
</emu-rhs>
<emu-rhs a="kul-a19e" id="prod-49th_4jp">
<emu-nt id="_ref_23322"><a href="ecmascript-language-expressions.html#prod-Literal">Literal</a></emu-nt>
</emu-rhs>
<emu-rhs a="g_mjk5cm" id="prod-VCC2b-df">
<emu-nt id="_ref_23323"><a href="ecmascript-language-expressions.html#prod-ArrayLiteral">ArrayLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="zreje_zz" id="prod-57nYHC9R">
<emu-nt id="_ref_23324"><a href="ecmascript-language-expressions.html#prod-ObjectLiteral">ObjectLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="jc7szv1s" id="prod-mJe0J4L3">
<emu-nt id="_ref_23325"><a href="ecmascript-language-functions-and-classes.html#prod-FunctionExpression">FunctionExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="2m5tsvzv" id="prod-tCjmqARP">
<emu-nt id="_ref_23326"><a href="ecmascript-language-functions-and-classes.html#prod-ClassExpression">ClassExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="q7f39ayg" id="prod-_eR92TK3">
<emu-nt id="_ref_23327"><a href="ecmascript-language-functions-and-classes.html#prod-GeneratorExpression">GeneratorExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="rvibtigb" id="prod-Jg_ST3R4">
<emu-nt id="_ref_23328"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncFunctionExpression">AsyncFunctionExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="naptrn97" id="prod-9ZhC3H4R">
<emu-nt id="_ref_23329"><a href="ecmascript-language-functions-and-classes.html#prod-AsyncGeneratorExpression">AsyncGeneratorExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="mbzy6lvr" id="prod-iAVN3dH2">
<emu-nt id="_ref_23330"><a href="ecmascript-language-lexical-grammar.html#prod-RegularExpressionLiteral">RegularExpressionLiteral</a></emu-nt>
</emu-rhs>
<emu-rhs a="2zis6bbu" id="prod-uEE3vhkY">
<emu-nt id="_ref_23331"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="Expression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="1px9pijq" id="prod-5uO1VxFZ">
<emu-nt id="_ref_23332"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
<emu-rhs a="cwoazx1t" id="prod-tcddXWO2">
<emu-nt id="_ref_23333"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>,</emu-t>
<emu-nt id="_ref_23334"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8368"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23335"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ConditionalExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ConditionalExpression">ConditionalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="d4vlxget" id="prod-OM1J5OMs">
<emu-nt id="_ref_23336"><a href="ecmascript-language-expressions.html#prod-ShortCircuitExpression">ShortCircuitExpression</a></emu-nt>
<emu-t>?</emu-t>
<emu-nt id="_ref_23337"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
<emu-t>:</emu-t>
<emu-nt id="_ref_23338"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>has</var> be <emu-xref aoid="HasCallInTailPosition" id="_ref_8369"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of the first <emu-nt id="_ref_23339"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <var>call</var>.</li><li>If <var>has</var> is <emu-val>true</emu-val>, return <emu-val>true</emu-val>.</li><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8370"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of the second <emu-nt id="_ref_23340"><a href="ecmascript-language-expressions.html#prod-AssignmentExpression">AssignmentExpression</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="LogicalANDExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="iybiqszh" id="prod-tjpyq_vi">
<emu-nt id="_ref_23341"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt>
<emu-t>&amp;&amp;</emu-t>
<emu-nt id="_ref_23342"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8371"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23343"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="LogicalORExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-LogicalORExpression">LogicalORExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tku92t5q" id="prod-mF39BKcc">
<emu-nt id="_ref_23344"><a href="ecmascript-language-expressions.html#prod-LogicalORExpression">LogicalORExpression</a></emu-nt>
<emu-t>||</emu-t>
<emu-nt id="_ref_23345"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8372"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23346"><a href="ecmascript-language-expressions.html#prod-LogicalANDExpression">LogicalANDExpression</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="CoalesceExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CoalesceExpression">CoalesceExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="3eoigfmu" id="prod-XrXVT2tR">
<emu-nt id="_ref_23347"><a href="ecmascript-language-expressions.html#prod-CoalesceExpressionHead">CoalesceExpressionHead</a></emu-nt>
<emu-t>??</emu-t>
<emu-nt id="_ref_23348"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8373"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23349"><a href="ecmascript-language-expressions.html#prod-BitwiseORExpression">BitwiseORExpression</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="CallExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="7jj-96li" id="prod-bByIrGsD">
<emu-nt id="_ref_23350"><a href="ecmascript-language-functions-and-classes.html#prod-CoverCallExpressionAndAsyncArrowHead">CoverCallExpressionAndAsyncArrowHead</a></emu-nt>
</emu-rhs>
<emu-rhs a="qugahahu" id="prod-lkRAvRUF">
<emu-nt id="_ref_23351"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-nt id="_ref_23352"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
<emu-rhs a="rc744wey" id="prod-e9jubpnL">
<emu-nt id="_ref_23353"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-nt id="_ref_23354"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If this <emu-nt id="_ref_23355"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt> is <var>call</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="tne-ixmh" id="prod-qFVLp3q-">
<emu-nt id="_ref_23356"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-nt id="_ref_23357"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
</emu-rhs>
<emu-rhs a="vah6zjkb" id="prod-UqoX45R5">
<emu-nt id="_ref_23358"><a href="ecmascript-language-expressions.html#prod-CallExpression">CallExpression</a></emu-nt>
<emu-nt id="_ref_23359"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
</emu-rhs>
<emu-rhs a="m-2pf2bd" id="prod-pHLlfSmO">
<emu-nt id="_ref_23360"><a href="ecmascript-language-expressions.html#prod-OptionalExpression">OptionalExpression</a></emu-nt>
<emu-nt id="_ref_23361"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8374"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23362"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="kktyttw7" id="prod-gfhvmXSt">
<emu-t>?.</emu-t>
<emu-t>[</emu-t>
<emu-nt id="_ref_23363"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="w-4ch2am" id="prod-hHSELWtc">
<emu-t>?.</emu-t>
<emu-nt id="_ref_23364"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="0xlnjlpz" id="prod-dlN3twzl">
<emu-t>?.</emu-t>
<emu-nt id="_ref_23365"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
<emu-rhs a="jgl-kve-" id="prod-Yn8_Hl_k">
<emu-nt id="_ref_23366"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-t>[</emu-t>
<emu-nt id="_ref_23367"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>]</emu-t>
</emu-rhs>
<emu-rhs a="lf2imwfr" id="prod-IKKs3v0D">
<emu-nt id="_ref_23368"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_23369"><a href="ecmascript-language-lexical-grammar.html#prod-IdentifierName">IdentifierName</a></emu-nt>
</emu-rhs>
<emu-rhs a="dnp-fbqk" id="prod-NQG4pluL">
<emu-nt id="_ref_23370"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-t>.</emu-t>
<emu-nt id="_ref_23371"><a href="ecmascript-language-lexical-grammar.html#prod-PrivateIdentifier">PrivateIdentifier</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="OptionalChain">
<emu-nt><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="ynxeowdb" id="prod-PSEzAHN6">
<emu-t>?.</emu-t>
<emu-nt id="_ref_23372"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
<emu-rhs a="eogoekck" id="prod-pk-z4M2l">
<emu-nt id="_ref_23373"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt>
<emu-nt id="_ref_23374"><a href="ecmascript-language-expressions.html#prod-Arguments">Arguments</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If this <emu-nt id="_ref_23375"><a href="ecmascript-language-expressions.html#prod-OptionalChain">OptionalChain</a></emu-nt> is <var>call</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="MemberExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="fj52gjle" id="prod-o5ILpQ4m">
<emu-nt id="_ref_23376"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt>
<emu-nt id="_ref_23377"><a href="ecmascript-language-expressions.html#prod-TemplateLiteral">TemplateLiteral</a></emu-nt>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>If this <emu-nt id="_ref_23378"><a href="ecmascript-language-expressions.html#prod-MemberExpression">MemberExpression</a></emu-nt> is <var>call</var>, return <emu-val>true</emu-val>.</li><li>Return <emu-val>false</emu-val>.</li></ol></emu-alg>
<emu-grammar><emu-production name="PrimaryExpression" collapsed="">
<emu-nt><a href="ecmascript-language-expressions.html#prod-PrimaryExpression">PrimaryExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="yrb110hm" id="prod-pxpI2tU_"><emu-nt id="_ref_23379"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt></emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Let <var>expr</var> be the <emu-nt id="_ref_23380"><a href="ecmascript-language-expressions.html#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt> that is <emu-xref href="#sec-syntactic-grammar" id="_ref_8375"><a href="notational-conventions.html#sec-syntactic-grammar">covered</a></emu-xref> by <emu-nt id="_ref_23381"><a href="ecmascript-language-expressions.html#prod-CoverParenthesizedExpressionAndArrowParameterList">CoverParenthesizedExpressionAndArrowParameterList</a></emu-nt>.</li><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8376"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <var>expr</var> with argument <var>call</var>.</li></ol></emu-alg>
<emu-grammar><emu-production name="ParenthesizedExpression">
<emu-nt><a href="ecmascript-language-expressions.html#prod-ParenthesizedExpression">ParenthesizedExpression</a></emu-nt> <emu-geq>:</emu-geq> <emu-rhs a="s6bvnd5v" id="prod-lff4OQNv">
<emu-t>(</emu-t>
<emu-nt id="_ref_23382"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt>
<emu-t>)</emu-t>
</emu-rhs>
</emu-production>
</emu-grammar>
<emu-alg><ol><li>Return <emu-xref aoid="HasCallInTailPosition" id="_ref_8377"><a href="ecmascript-language-functions-and-classes.html#sec-static-semantics-hascallintailposition">HasCallInTailPosition</a></emu-xref> of <emu-nt id="_ref_23383"><a href="ecmascript-language-expressions.html#prod-Expression">Expression</a></emu-nt> with argument <var>call</var>.</li></ol></emu-alg>
</emu-clause>
<emu-clause id="sec-preparefortailcall" type="abstract operation" aoid="PrepareForTailCall">
<h1><span class="secnum">15.10.3</span> PrepareForTailCall ( )</h1>
<p>The abstract operation PrepareForTailCall takes no arguments and returns <emu-const>unused</emu-const>. It performs the following steps when called:</p>
<emu-alg><ol><li><emu-xref href="#assert" id="_ref_8378"><a href="notational-conventions.html#assert">Assert</a></emu-xref>: The current <emu-xref href="#sec-execution-contexts" id="_ref_8379"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref> will not subsequently be used for the evaluation of any ECMAScript code or built-in functions. The invocation of Call subsequent to the invocation of this abstract operation will create and push a new <emu-xref href="#sec-execution-contexts" id="_ref_8380"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref> before performing any such evaluation.</li><li>Discard all resources associated with the current <emu-xref href="#sec-execution-contexts" id="_ref_8381"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref>.</li><li>Return <emu-const>unused</emu-const>.</li></ol></emu-alg>
<p>A tail position call must either release any transient internal resources associated with the currently executing function <emu-xref href="#sec-execution-contexts" id="_ref_8382"><a href="executable-code-and-execution-contexts.html#sec-execution-contexts">execution context</a></emu-xref> before invoking the target function or reuse those resources in support of the target function.</p>
<emu-note><span class="note">Note</span><div class="note-contents">
<p>For example, a tail position call should only grow an implementation's activation record stack by the amount that the size of the target function's activation record exceeds the size of the calling function's activation record. If the target function's activation record is smaller, then the total size of the stack should decrease.</p>
</div></emu-note>
</emu-clause>
</emu-clause>
</emu-clause></div></body>