<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:Z="urn:schemas-microsoft-com:" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Tms Rmn";
        panose-1:2 2 6 3 4 5 5 2 3 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
h1
        {mso-style-priority:9;
        mso-style-link:"Heading 1 Char";
        margin-top:12.0pt;
        margin-right:0in;
        margin-bottom:3.0pt;
        margin-left:34.0pt;
        text-align:justify;
        text-indent:-34.0pt;
        page-break-after:avoid;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.5pt;}
h2
        {mso-style-priority:9;
        mso-style-link:"Heading 2 Char";
        margin-top:0in;
        margin-right:0in;
        margin-bottom:3.0pt;
        margin-left:45.35pt;
        text-align:justify;
        text-indent:-39.7pt;
        page-break-after:avoid;
        font-size:11.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.5pt;}
h3
        {mso-style-priority:9;
        mso-style-link:"Heading 3 Char";
        margin-top:0in;
        margin-right:0in;
        margin-bottom:3.0pt;
        margin-left:56.7pt;
        text-align:justify;
        text-indent:-45.35pt;
        page-break-after:avoid;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.5pt;}
h4
        {mso-style-priority:9;
        mso-style-link:"Heading 4 Char";
        margin-top:0in;
        margin-right:0in;
        margin-bottom:3.0pt;
        margin-left:68.05pt;
        text-align:justify;
        text-indent:-51.05pt;
        page-break-after:avoid;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.5pt;}
p.MsoCommentText, li.MsoCommentText, div.MsoCommentText
        {mso-style-priority:99;
        mso-style-link:"Comment Text Char";
        margin-top:0in;
        margin-right:0in;
        margin-bottom:6.0pt;
        margin-left:0in;
        text-align:justify;
        font-size:10.0pt;
        font-family:"Tms Rmn","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.Heading1Char
        {mso-style-name:"Heading 1 Char";
        mso-style-priority:9;
        mso-style-link:"Heading 1";
        font-family:"Times New Roman","serif";
        letter-spacing:.5pt;
        font-weight:bold;}
span.Heading2Char
        {mso-style-name:"Heading 2 Char";
        mso-style-priority:9;
        mso-style-link:"Heading 2";
        font-family:"Times New Roman","serif";
        letter-spacing:.5pt;
        font-weight:bold;}
span.Heading3Char
        {mso-style-name:"Heading 3 Char";
        mso-style-priority:9;
        mso-style-link:"Heading 3";
        font-family:"Times New Roman","serif";
        letter-spacing:.5pt;
        font-weight:bold;}
span.Heading4Char
        {mso-style-name:"Heading 4 Char";
        mso-style-priority:9;
        mso-style-link:"Heading 4";
        font-family:"Times New Roman","serif";
        letter-spacing:.5pt;
        font-weight:bold;}
span.CommentTextChar
        {mso-style-name:"Comment Text Char";
        mso-style-priority:99;
        mso-style-link:"Comment Text";
        font-family:"Tms Rmn","serif";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
p.M1, li.M1, div.M1
        {mso-style-name:M1;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:6.0pt;
        margin-left:34.0pt;
        text-align:justify;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.3pt;}
p.M2, li.M2, div.M2
        {mso-style-name:M2;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:6.0pt;
        margin-left:45.35pt;
        text-align:justify;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.3pt;}
p.M3, li.M3, div.M3
        {mso-style-name:M3;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:6.0pt;
        margin-left:56.7pt;
        text-align:justify;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.3pt;}
p.M4, li.M4, div.M4
        {mso-style-name:M4;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:6.0pt;
        margin-left:68.05pt;
        text-align:justify;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.3pt;}
p.BulletNotlast, li.BulletNotlast, div.BulletNotlast
        {mso-style-name:"Bullet Notlast";
        margin-top:0in;
        margin-right:0in;
        margin-bottom:2.0pt;
        margin-left:.15in;
        text-align:justify;
        text-indent:-.15in;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.3pt;}
p.BulletLast, li.BulletLast, div.BulletLast
        {mso-style-name:"Bullet Last";
        margin-top:0in;
        margin-right:0in;
        margin-bottom:11.0pt;
        margin-left:.15in;
        text-align:justify;
        text-indent:-.15in;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.3pt;}
p.Alg3, li.Alg3, div.Alg3
        {mso-style-name:"Alg 3";
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.25in;
        margin-bottom:.0001pt;
        text-indent:-.25in;
        font-size:10.0pt;
        font-family:"Times New Roman","serif";
        letter-spacing:.3pt;}
span.EmailStyle34
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:405037843;
        mso-list-type:hybrid;
        mso-list-template-ids:561309538 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:104.05pt;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1
        {mso-list-id:518156219;
        mso-list-template-ids:315004632;}
@list l1:level1
        {mso-level-tab-stop:.25in;
        mso-level-number-position:left;
        margin-left:.25in;
        text-indent:-.25in;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l1:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2
        {mso-list-id:1020668191;
        mso-list-type:hybrid;
        mso-list-template-ids:-1451987540 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l2:level2
        {mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level3
        {mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level4
        {mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level5
        {mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level6
        {mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level7
        {mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level8
        {mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level9
        {mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3
        {mso-list-id:1532187857;
        mso-list-type:simple;
        mso-list-template-ids:67698703;}
@list l3:level1
        {mso-level-tab-stop:.25in;
        mso-level-number-position:left;
        margin-left:.25in;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal>I&#8217;ve just finished reworking section 10 to better
accommodate block scoped function declarations and const statements.&nbsp; In
the course of this I had to make various decisions about the semantics. The
primary purpose of this message is to provide visibility to those decisions and
to get feedback on them.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>In introducing const statements and block scoped function
declaration I tried to apply two over-riding principles:<o:p></o:p></p>

<p class=MsoNormal>1) Anything that is valid to do in ES3 continues to have the
exact same semantics.<o:p></o:p></p>

<p class=MsoNormal>2) Anything thing that is new (or non-standard) and would
not be valid in ES3 should have a semantics that is rational and consistent with
a future introduction of block scoped Let variable bindings<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Here are the results:<o:p></o:p></p>

<p class=MsoNormal>All var declarations continue to be hoisted to
&#8220;top-level&#8221; execution context. Vars never have block level scope or
extent.<o:p></o:p></p>

<p class=MsoNormal>(&#8220;top-level&#8221; mean the global code, eval code, or
the top-level of a function.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Function declarations and const declarations are processed
in parallel within a lexical contour (top-level or block). Neither has
precedence over &nbsp;the other, unlike the manner in which function
declarations take precedence over formal parameters in ES3.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>A &#8220;top-level&#8221; function declaration over-writes
any like-named formal parameters or preceding like-named function
declarations.&nbsp; This is an ES3 semantics.<o:p></o:p></p>

<p class=MsoNormal>&#8220;Top-level&#8221; function declarations are
writable.&nbsp; Subsequent declarations or assignments may change their value.
This is an ES3 semantics.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>A &nbsp;&#8220;top-level&#8221; const declaration may not
have the same name as a formal parameter or any other &#8220;top-level&#8221;
declaration (including consts, vars, and functions).&nbsp; Since consts are
new, this is a new semantics.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Const and function declarations within blocks must be
uniquely named, such a declaration may not over-write a preceding declaration
in the same block and an attempt to do so is a syntax error.&nbsp; Such
declarations, of course, shadow any like named declarations in enclosing
scopes. Since consts and function declarations in blocks are new, this is a new
semantics.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>For scoping purposes, const and function declarations are
&#8220;hoisted&#8221; to the top of their defining block. &nbsp;There may be
only one, consistent binding of a name within a block. Functions are
initialized on block entry, consts are initialized when they are reached in
execution flow. Accessing the value of a const before it is initialized throws
an exception. Since consts and function declarations in blocks are new, this is
a new semantics.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Within in a block, function declarations are read-only
bindings. Since declarations in blocks are new, this is a new semantics.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Can anybody from ES4 comment on how closely this matches the
current ES4 spec for block scoped consts and nested function declarations.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>In the course of this, I noticed a number of conditions that
plausibly might be restricted in the cautious subset, but currently
aren&#8217;t &nbsp;specified as such:<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l2 level1 lfo2'><![if !supportLists]><span
style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Illegal for a function to have duplicately named
formal parameters<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l2 level1 lfo2'><![if !supportLists]><span
style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Illegal for a function to contain a top level
function declaration with a function name that is the same as a formal
parameter.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l2 level1 lfo2'><![if !supportLists]><span
style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Illegal to have multiple top level function
declarations for the same function name<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l2 level1 lfo2'><![if !supportLists]><span
style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Illegal to have a function declaration with the
same name as var declaration.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l2 level1 lfo2'><![if !supportLists]><span
style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Illegal for a function to contain a var
declaration with the same name as a formal parameter.<o:p></o:p></p>

<p class=MsoListParagraph style='text-indent:-.25in;mso-list:l2 level1 lfo2'><![if !supportLists]><span
style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Illegal to assign to a top-level function name.<o:p></o:p></p>

<p class=MsoNormal>Does anybody want to advocate for &nbsp;including these
restrictions in the cautious subset.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>The following is the revised version of section 10. Review
by additional eyeballs would be appreciated.<o:p></o:p></p>

<h1><a name="_Toc202942782"><span lang=EN-GB>10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Execution Contexts</span></a><span lang=EN-GB><o:p></o:p></span></h1>

<p class=M1><span lang=EN-GB>When control is transferred to ECMAScript
executable code, control is entering an <i>execution context</i>. Active
execution contexts logically form a stack. The top execution context on this
logical stack is the running execution context.<a name="_Toc381513660"></a><a
name="_Toc382202803"></a><a name="_Toc382203023"></a><a name="_Toc382212182"></a><a
name="_Toc382212421"></a><a name="_Toc382291527"></a><a name="_Toc385672167"></a><a
name="_Toc393690262"></a><o:p></o:p></span></p>

<h2><a name="_Toc202942783"></a><a name="_Toc472818800"></a><span lang=EN-GB>10.1&nbsp;&nbsp;&nbsp;&nbsp;
Definition</span><span lang=EN-GB>s<a name="_Toc381513661"></a><a
name="_Toc382202804"></a><a name="_Toc382203024"></a><a name="_Toc382212183"></a><a
name="_Toc382212422"></a><a name="_Toc382291528"></a><a name="_Toc385672168"></a><a
name="_Toc393690263"></a><a name="_Ref398439905"></a><a name="_Ref404493443"></a><a
name="_Ref404493461"></a><o:p></o:p></span></h2>

<h3><a name="_Toc202942784"></a><a name="_Ref424536598"></a><a
name="_Ref424536616"></a><a name="_Toc472818801"></a><span lang=EN-GB>10.1.1&nbsp;&nbsp;&nbsp;&nbsp;
Function Object</span><span lang=EN-GB>s<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>There are two types of Function objects:<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>Program functions are defined in source text by a <i>FunctionDeclaration</i>
or created dynamically either by using a <i>FunctionExpression</i> or by using
the built-in </span><b><span lang=EN-GB style='font-family:"Courier New"'>Function</span></b><span
lang=EN-GB> object as a constructor.<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>Internal functions are built-in objects of the language, such as </span><b><span
lang=EN-GB style='font-family:"Courier New"'>parseInt</span></b><span
lang=EN-GB> and </span><b><span lang=EN-GB style='font-family:"Courier New"'>Math.exp</span></b><span
lang=EN-GB>. An implementation may also provide implementation-dependent
internal functions that are not described in this specification. These
functions do not necessarily contain executable code defined by the ECMAScript
grammar, in which case they are excluded from this discussion of execution
contexts.<a name="_Toc381513662"></a><a name="_Toc382202805"></a><a
name="_Toc382203025"></a><a name="_Toc382212184"></a><a name="_Toc382212423"></a><a
name="_Toc382291529"></a><a name="_Toc385672169"></a><a name="_Toc393690264"></a><o:p></o:p></span></p>

<h3><a name="_Toc202942785"></a><a name="_Ref458336277"></a><a
name="_Toc472818802"></a><span lang=EN-GB>10.1.2&nbsp;&nbsp;&nbsp;&nbsp; Types
of Executable Cod</span><span lang=EN-GB>e<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>There are five types of ECMAScript executable
code:<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><i><span
lang=EN-GB>Global code</span></i><span lang=EN-GB> is source text that is
treated as an ECMAScript <i>Program</i>.. The global code of a particular <i>Program</i>
does not include any source text that is parsed as part of a <i>Block</i> or of
a <i>FunctionBody</i> except that it does include the code of any<i> </i>VariableDeclaration
that is parsed as part of such a <i>Block</i> or as part of a <i>Block</i>
nested at any level within such a <i>Block.</i><o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><i><span
lang=EN-GB>Eval code</span></i><span lang=EN-GB> is the source text supplied to
the built-in </span><b><span lang=EN-GB style='font-family:"Courier New"'>eval</span></b><span
lang=EN-GB> function. More precisely, if the parameter to the built-in </span><b><span
lang=EN-GB style='font-family:"Courier New"'>eval</span></b><span lang=EN-GB>
function is a string, it is treated as an ECMAScript <i>Program</i>. The eval
code for a particular invocation of </span><b><span lang=EN-GB
style='font-family:"Courier New"'>eval</span></b><span lang=EN-GB> is the global
code portion of the string parameter. The eval code for a particular invocation
of </span><b><span lang=EN-GB style='font-family:"Courier New"'>eval</span></b><span
lang=EN-GB> does not include any source text that is parsed as part of a <i>Block</i>
or a <i>FunctionBody </i>except that it does include the code of any<i>
VariableDeclaration</i> that is parsed as part of such a <i>Block</i> or as
part of a <i>Block</i> nested at any level within such a <i>Block.</i><o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><i><span
lang=EN-GB>Function code</span></i><span lang=EN-GB> is source text that is
parsed as part of a <i>FunctionBody</i>. The function code of a particular <i>FunctionBody</i>
does not include any source text that is parsed as part of a <i>Block</i> or a <i>FunctionBody</i>
except that it does include the code of any<i> VariableDeclaration</i> that is
parsed as part of such a <i>Block</i> or as part of a <i>Block</i> nested at
any level within such a <i>Block.</i><o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><i><span
lang=EN-GB>Function code</span></i><span lang=EN-GB> also denotes the source
text supplied when using the built-in </span><b><span lang=EN-GB
style='font-family:"Courier New"'>Function</span></b><span lang=EN-GB> object
as a constructor. More precisely, the last parameter provided to the </span><b><span
lang=EN-GB style='font-family:"Courier New"'>Function</span></b><span
lang=EN-GB> constructor is converted to a string and treated as the <i>FunctionBody</i>.
If more than one parameter is provided to the </span><b><span lang=EN-GB
style='font-family:"Courier New"'>Function</span></b><span lang=EN-GB>
constructor, all parameters except the last one are converted to strings and
concatenated together, separated by commas. The resulting string is interpreted
as the <i>FormalParameterList</i> for the <i>FunctionBody</i> defined by the
last parameter. The function code for a particular instantiation of a </span><b><span
lang=EN-GB style='font-family:"Courier New"'>Function</span></b><span
lang=EN-GB> does not include any source text that is parsed as part of a nested
<i>FunctionBody</i>. The function code for a particular instantiation of a </span><b><span
lang=EN-GB style='font-family:"Courier New"'>Function</span></b><span
lang=EN-GB> does not include any source text that is parsed as part of a <i>Block</i>
or a <i>FunctionBody</i> except that it does include the code of any<i>
VariableDeclaration</i> that is parsed as part of such a <i>Block</i> or as
part of a <i>Block</i> nested at any level within such a <i>Block.<o:p></o:p></i></span></p>

<p class=M3 style='margin-left:1.0in;text-indent:-15.3pt'><i><span lang=EN-GB>Lexical
Block code</span></i><span lang=EN-GB> is the source code that that is parsed
as the <i>StatementList</i> of a <i>Block</i>. The <i>lexical block&nbsp; code</i>
of a particular <i>StatementList</i> does not include any source text that is
parsed as part of a nested <i>FunctionBody.</i><o:p></o:p></span></p>

<h4><span lang=EN-GB>10.1.2.3 Applying Usage Subsets to Executable code<o:p></o:p></span></h4>

<p class=M4><span lang=EN-GB>Each occurence of one of these types of code may
be restricted to use a defined subset of the complete ECMAScript language.<o:p></o:p></span></p>

<p class=M4 style='margin-left:104.05pt;text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
lang=EN-GB style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-GB>Global code is unrestricted unless the <i>Program</i> that defines
the code includes a <i>UseSubsetDirective</i>.<o:p></o:p></span></p>

<p class=M4 style='margin-left:104.05pt;text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
lang=EN-GB style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-GB>Eval code inherits the restrictions of the execution context in
which the eval operator appears, but its execution context may be further
restricted if the <i>Program</i> that defines the eval code includes a <i>UseSubsetDirective</i>.
In that case, the restrictions of the execution context are the union of the
restrictions of the inherited execution context and the restrictions specified
by the <i>UseSubsetDirective</i>. Such a unioning of restrictions is the
equivalent of intersecting the specified usage subsets.<o:p></o:p></span></p>

<p class=M4 style='margin-left:104.05pt;text-indent:-.25in;mso-list:l0 level1 lfo4'><![if !supportLists]><span
lang=EN-GB style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-GB>Function code made by evaluating a <i>FunctionDeclaration</i> or a <i>FunctionExpression</i>,
function code supplied as the last argument to the Function constructor, and
lexical block code all&nbsp; inherit the restrictions of the execution context
in which the evaluation occurs.<o:p></o:p></span></p>

<h3><a name="_Ref404501171"></a><a name="_Ref424533241"></a><a
name="_Ref424533260"></a><a name="_Ref424533302"></a><a name="_Ref449943314"></a><a
name="_Toc472818803"></a><a name="_Toc202942786"></a><a name="_Toc381513663"></a><a
name="_Toc382202806"></a><a name="_Toc382203026"></a><a name="_Toc382212185"></a><a
name="_Toc382212424"></a><a name="_Toc382291530"></a><a name="_Toc385672170"></a><a
name="_Ref393524922"></a><a name="_Ref393526178"></a><a name="_Toc393690265"></a><a
name="_Ref404501155"></a><span lang=EN-GB>10.1.3&nbsp;&nbsp;&nbsp;&nbsp;
Environment Bindings Instantiatio</span><span lang=EN-GB>n<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>Every execution context has associated with it an
environment object. For all kinds of execution contexts, constants and
functions declared in the source text are added as properties of the
environment object. For global code, eval code, and function code variables
declared in the source text are also added as properties of the environment
object . For function code, parameters are added as properties of the
environment object.<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>Which object is used as the environment object and
what attributes are used for the properties depends on the type of code, but
the remainder of the behaviour is generic. On entering an execution context,
the properties are bound to the environment object in the following order:<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>For function code: for each formal parameter, as defined in the <i>FormalParameterList</i>,
create a named data property of the environment object whose name is the <i>Identifier
</i>and whose attributes are determined by the type of code. The values of the
parameters are supplied by the caller as arguments to [[Call]]. If the caller
supplies fewer parameter values than there are formal parameters, the extra
formal parameters have value <b>undefined</b>. If two or more formal parameters
share the same name, hence the same property, the corresponding property is
given the value that was supplied for the last parameter with this name. If the
value of this last parameter was not supplied by the caller, the value of the
corresponding property is <b>undefined</b>.<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>For lexical block code: if the lexical block has any block
parameters, create for each block parameter a named data property of the
environment object whose name, value, are determined by evaluation context of
the <i>Block </i>and whose attributes are {[[Writable]]: <b>true</b>,
[[Enumerable]]: <b>false</b>, [[Flexible: <b>false</b>]]}. Only a <i>TryStatement</i>
creates lexical block contexts with block parameters.<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>For all of the <i>FunctionDeclaration</i> and <i>ConstantDeclaration</i>
in the code perform the following algorithm. Semantically, this step must
follow the creation of <i>FormalParameterList</i> or block parameter
properties:<o:p></o:p></span></p>

<p class=M4 style='margin-left:1.0in;text-indent:0in;page-break-after:avoid;
mso-list:l1 level1 lfo6'><![if !supportLists]><span lang=EN-GB><span
style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB>Let <i>CTX</i> be the current
execution context and its associated environment object.<o:p></o:p></span></p>

<p class=M4 style='margin-left:1.0in;text-indent:0in;page-break-after:avoid;
mso-list:l1 level1 lfo6'><![if !supportLists]><span lang=EN-GB><span
style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB>For each <i>FunctionDeclaration</i>
and <i>ConstantDeclaration, D </i>in the code in source code order,<o:p></o:p></span></p>

<p class=M4 style='margin-left:1.0in;text-indent:22.5pt;page-break-after:avoid;
mso-list:l1 level2 lfo6'><![if !supportLists]><span lang=EN-GB><span
style='mso-list:Ignore'>a.<span style='font:7.0pt "Times New Roman"'>&nbsp; </span></span></span><![endif]><span
lang=EN-GB>Let <i>N</i> be the <i>Identifer</i> in <i>D.</i><o:p></o:p></span></p>

<p class=M4 style='margin-left:94.5pt;text-indent:0in;page-break-after:avoid;
mso-list:l1 level2 lfo6'><![if !supportLists]><span lang=EN-GB><span
style='mso-list:Ignore'>b.<span style='font:7.0pt "Times New Roman"'>&nbsp; </span></span></span><![endif]><span
lang=EN-GB>If <i>D</i> is a <i>ConstantDeclaration</i> then<o:p></o:p></span></p>

<p class=M4 style='margin-left:1.5in;text-indent:-1.5in;mso-text-indent-alt:
0in;page-break-after:avoid;mso-list:l1 level3 lfo6'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>i.</span></span><![endif]><span lang=EN-GB>If<i> CTX</i> already
contains a property named <i>N</i>, throw a </span><span lang=EN-GB
style='font-family:"Courier New"'>SyntaxError</span><span lang=EN-GB>
exception.<o:p></o:p></span></p>

<p class=M4 style='margin-left:121.5pt;text-indent:-121.5pt;mso-text-indent-alt:
-13.5pt;page-break-after:avoid;mso-list:l1 level3 lfo6'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>ii.</span></span><![endif]><span lang=EN-GB>Create a named data property
in CTX whose name is <i>N</i>, whose [[Const]] attribute is <b>Unitialized</b>,
whose [[Writable]] attribute is <b>false</b>, <b><i>&nbsp;</i></b>and whose
value is set to <b>undefined</b>.<o:p></o:p></span></p>

<p class=M4 style='margin-left:94.5pt;text-indent:0in;page-break-after:avoid;
mso-list:l1 level2 lfo6'><![if !supportLists]><span lang=EN-GB><span
style='mso-list:Ignore'>c.<span style='font:7.0pt "Times New Roman"'>&nbsp; </span></span></span><![endif]><span
lang=EN-GB>If <i>D</i> is a <i>FunctionDeclaration</i> then <o:p></o:p></span></p>

<p class=M4 style='margin-left:1.5in;text-indent:-1.5in;mso-text-indent-alt:
0in;page-break-after:avoid;mso-list:l1 level3 lfo6'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>i.</span></span><![endif]><span lang=EN-GB>If<i> CTX</i> already
contains a property named <i>N</i>, then<o:p></o:p></span></p>

<p class=M4 style='margin-left:2.0in;text-indent:-.25in;page-break-after:avoid;
mso-list:l1 level4 lfo6'><![if !supportLists]><span lang=EN-GB><span
style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB>If<i> CTX</i> is the execution
context of a <i>Block</i>, throw a </span><span lang=EN-GB style='font-family:
"Courier New"'>SyntaxError</span><span lang=EN-GB> exception.<o:p></o:p></span></p>

<p class=M4 style='margin-left:2.0in;text-indent:-.25in;page-break-after:avoid;
mso-list:l1 level4 lfo6'><![if !supportLists]><span lang=EN-GB><span
style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><i><span lang=EN-GB>If the existing property has
a [[Const]] attribute, throw a </span></i><i><span lang=EN-GB style='font-family:
"Courier New"'>SyntaxError</span></i><i><span lang=EN-GB> exception</span></i><span
lang=EN-GB> otherwise the value and attributes of the existing property will be
replaced by the actions of step 2cii below.<o:p></o:p></span></p>

<p class=M4 style='margin-left:121.5pt;text-indent:-121.5pt;mso-text-indent-alt:
-9.0pt;page-break-after:avoid;mso-list:l1 level3 lfo6'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'><span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>ii.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-GB>Create a named data property in CTX whose name is <i>N</i> and whose
value is the result returned by creating a Function object as described in 13.<o:p></o:p></span></p>

<p class=M4 style='margin-left:94.5pt;text-indent:0in;mso-list:l1 level2 lfo6'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'>d.<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span></span><![endif]><span lang=EN-GB>Other attributes of the named
data property are determined by the type of code<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>For execution contexts that are not lexical blocks: For each <i>VariableDeclaration</i>
or <i>VariableDeclarationNoIn</i> in the code (including <i>VariableDeclarations</i>
contained within Blocks that are within the code), create a property of the
environment object whose name is the <i>Identifier</i> in the <i>VariableDeclaration</i>
or <i>VariableDeclarationNoIn</i>, whose value is <b>undefined</b></span><b><span
lang=EN-GB style='font-family:"Courier New"'> </span></b><span lang=EN-GB>and
whose attributes are determined by the type of code. If there is already a
property of the environment object with the name of a declared variable and the
property has a [[Const]] attribute throw a </span><span lang=EN-GB
style='font-family:"Courier New"'>SyntaxError</span><span lang=EN-GB>
exception, otherwise the value of the existing property and its attributes are
not changed. Semantically, this step must follow the creation of the <i>FormalParameterList</i>
and the <i>FunctionDeclaration</i> and <i>ConstantDeclaration</i> properties.
In particular, if a declared variable has the same name as a declared function
or formal parameter, the variable declaration does not disturb the existing
property.<a name="_Ref381180531"></a><a name="_Toc381513664"></a><a
name="_Toc382202807"></a><a name="_Toc382203027"></a><a name="_Toc382212186"></a><a
name="_Toc382212425"></a><a name="_Toc382291531"></a><a name="_Toc385672171"></a><a
name="_Toc393690266"></a><o:p></o:p></span></p>

<h4><span lang=EN-GB>10.1.3.1&nbsp;&nbsp;&nbsp; Usage Subset Restrictions<o:p></o:p></span></h4>

<p class=M4><span lang=EN-GB>When defined within an execution context subset
restricted to the </span><span lang=EN-GB style='font-family:"Courier New"'>cautious</span><span
lang=EN-GB> subset, a function may not have two or more formal parameters that
have the same name. An attempt to create a such a function with conflicting
parameters names will fail, either statically, if expressed as a <i>FunctionDeclaration</i>
or <i>FunctionExpression</i>, or dynamically by throwing a </span><span
lang=EN-GB style='font-family:"Courier New"'>SyntaxError</span><span
lang=EN-GB> exception, if expressed in a call to the </span><span lang=EN-GB
style='font-family:"Courier New"'>Function</span><span lang=EN-GB> constructor.<o:p></o:p></span></p>

<h3><a name="_Toc202942787"></a><a name="_Ref424532979"></a><a
name="_Toc472818804"></a><span lang=EN-GB>10.1.4&nbsp;&nbsp;&nbsp;&nbsp; Scope
Chain and Identifier Resolutio</span><span lang=EN-GB>n<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>Every execution context has associated with it a
scope chain. A scope chain is a list of objects that are searched when
evaluating an <i>Identifier</i>. When control enters an execution context, a
scope chain is created and populated with an initial set of objects, depending
on the type of code. During execution within an execution context, the scope
chain of the execution context is affected only by <i>Blocks</i>,&nbsp; </span><b><span
lang=EN-GB style='font-family:"Courier New"'>with</span></b><span lang=EN-GB>
statements (see 12.10) and </span><b><span lang=EN-GB style='font-family:"Courier New"'>catch</span></b><span
lang=EN-GB> clauses (<a name="_Hlt458336618"></a>see 12.14).<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>During execution, the syntactic production <i>PrimaryExpression</i>
: <i>Identifier</i> is evaluated using the following algorithm:<o:p></o:p></span></p>

<p class=Alg3 style='margin-left:56.7pt;text-indent:0in;mso-list:l3 level1 lfo8'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB>Get the next object in the
scope chain. If there isn't one, go to step 5.<o:p></o:p></span></p>

<p class=Alg3 style='margin-left:56.7pt;text-indent:0in;mso-list:l3 level1 lfo8'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB>Call the [[HasProperty]] method
of Result(1), passing the <i>Identifier</i> as the property name.<o:p></o:p></span></p>

<p class=Alg3 style='margin-left:70.9pt;text-indent:-14.2pt;mso-list:l3 level1 lfo8'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span></span><![endif]><span lang=EN-GB>If Result(2) is <b>true</b>,
return a value of type Reference whose base object is Result(1) and whose
property name is the <i>Identifier</i>.<o:p></o:p></span></p>

<p class=Alg3 style='margin-left:56.7pt;text-indent:0in;mso-list:l3 level1 lfo8'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'>4.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
</span></span></span><![endif]><span lang=EN-GB>Go to step 1.<o:p></o:p></span></p>

<p class=Alg3 style='mso-margin-top-alt:0in;margin-right:0in;margin-bottom:
11.0pt;margin-left:70.9pt;text-indent:-14.2pt;mso-list:l3 level1 lfo8'><![if !supportLists]><span
lang=EN-GB><span style='mso-list:Ignore'>5.<span style='font:7.0pt "Times New Roman"'>&nbsp;
</span></span></span><![endif]><span lang=EN-GB>Return a value of type
Reference whose base object is </span><b><span lang=EN-GB style='font-family:
"Courier New"'>null</span></b><span lang=EN-GB> and whose property name is the <i>Identifier</i>.<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>The result of evaluating an identifier is always a
value of type Reference with its member name component equal to the identifier
string.<a name="_Toc381513665"></a><a name="_Toc382202808"></a><a
name="_Toc382203028"></a><a name="_Toc382212187"></a><a name="_Toc382212426"></a><a
name="_Toc382291532"></a><a name="_Toc385672172"></a><a name="_Ref393524863"></a><a
name="_Toc393690267"></a><o:p></o:p></span></p>

<h3><a name="_Toc202942788"></a><a name="_Toc472818805"></a><span lang=EN-GB>10.1.5&nbsp;&nbsp;&nbsp;&nbsp;
Global Objec</span><span lang=EN-GB>t<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>There is a unique <i>global object</i> (15.1),
which is created before control enters any execution context. Initially the
global object has the following properties:<o:p></o:p></span></p>

<p class=BulletNotlast style='margin-left:56.7pt;text-indent:0in'><span
lang=EN-GB>Standard built-in objects such as Math, String, Date, parseInt, etc.
These have attributes {&nbsp; [[Enumerable]]: <b>false</b> }.<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>Additional host defined properties. This may include a property
whose value is the global object itself; for example, in the HTML document
object model the </span><b><span lang=EN-GB style='font-family:"Courier New"'>window</span></b><span
lang=EN-GB> property of the global object is the global object itself.<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>As control enters execution contexts, and as
ECMAScript code is executed, additional properties may be added to the global
object and the initial properties may be changed.<a name="_Toc381513666"></a><a
name="_Toc382202809"></a><a name="_Toc382203029"></a><a name="_Toc382212188"></a><a
name="_Toc382212427"></a><a name="_Toc382291533"></a><a name="_Toc385672173"></a><a
name="_Ref387139409"></a><a name="_Ref387139418"></a><a name="_Toc393690268"></a><a
name="_Ref404501819"></a><o:p></o:p></span></p>

<h3><a name="_Toc202942789"></a><a name="_Ref458336280"></a><a
name="_Toc472818806"></a><span lang=EN-GB>10.1.6&nbsp;&nbsp;&nbsp;&nbsp;
Activation Objec</span><span lang=EN-GB>t<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>When control enters an execution context for
function code or a lexical block, an object called the activation object is
created and associated with the execution context.<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>If the execution context is for function code, the
activation object is initialised with a property with name </span><b><span
lang=EN-GB style='font-family:"Courier New"'>arguments</span></b><span
lang=EN-GB> and attributes { [[Writable]]: <b>true</b>, [[Enumerable]]: <b>false</b>,
[[Flexible]]: <b>false</b> }. The initial value of this property is the
arguments object described below.<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>The activation object is then used as the
environment object for the purposes of environment bindings instantiation.<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>The activation object is purely a specification
mechanism. It is impossible for an ECMAScript program to access the activation
object. It can access members of the activation object, but not the activation
object itself. When the call operation is applied to a Reference value whose
base object is an activation object, </span><b><span lang=EN-GB
style='font-family:"Courier New"'>null</span></b><span lang=EN-GB> is used as
the <b>this</b> value of the call.<a name="_Toc380981890"></a><a
name="_Toc381513668"></a><a name="_Toc382202811"></a><a name="_Toc382203031"></a><a
name="_Toc382212190"></a><a name="_Toc382212429"></a><a name="_Toc382291535"></a><a
name="_Toc385672174"></a><a name="_Toc393690269"></a><o:p></o:p></span></p>

<h4><a name="_Toc472818807"><span lang=EN-GB>10.1.6.1&nbsp;&nbsp;&nbsp; Usage
Subset cautious Restrictions</span></a><span lang=EN-GB><o:p></o:p></span></h4>

<p class=M4><span lang=EN-GB>For functions defined within an execution subset
restricted to the </span><span lang=EN-GB style='font-family:"Courier New"'>cautious</span><span
lang=EN-GB> subset, the activation object is only initialized with an
&#8220;arguments&#8221; property if the function mentions
&#8220;arguments&#8221; freely in its body. In which case the &#8220;arguments&#8221;
property is initialized with attributes {[[Writable]]: <b>false</b>,
[[Enumerable]]: <b>false</b>, [[Flexible]]: <b>false</b>}.<o:p></o:p></span></p>

<h3><a name="_Toc202942790"><span lang=EN-GB>10.1.7&nbsp;&nbsp;&nbsp;&nbsp; Thi</span></a><span
lang=EN-GB>s<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>There is a <b>this</b> value associated with every
active execution context. The <b>this</b> value depends on the caller and the
type of code being executed and is determined when control enters the execution
context. The <b>this</b> value associated with an execution context is
immutable.<a name="_Toc380981891"></a><a name="_Toc381513669"></a><a
name="_Toc382202812"></a><a name="_Toc382203032"></a><a name="_Toc382212191"></a><a
name="_Toc382212430"></a><a name="_Toc382291536"></a><a name="_Toc385672175"></a><a
name="_Ref387139466"></a><a name="_Ref393526420"></a><a name="_Toc393690270"></a><a
name="_Ref404501230"></a><a name="_Ref404501830"></a><o:p></o:p></span></p>

<h3><a name="_Ref449940080"></a><a name="_Toc202942791"></a><a
name="_Toc472818808"></a><span lang=EN-GB>10.1.8&nbsp;&nbsp;&nbsp;&nbsp;
Arguments Objec</span><span lang=EN-GB>t<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>When control enters an execution context for function
code, an arguments object is created (see above) and initialised as follows:<o:p></o:p></span></p>

<p class=BulletNotlast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>The value of the internal [[Prototype]] property of the arguments
object is the original Array prototype object, the one that is the initial
value of </span><b><span lang=EN-GB style='font-family:"Courier New"'>Array.prototype</span></b><span
lang=EN-GB> (see 15.4.3.1).<o:p></o:p></span></p>

<p class=BulletNotlast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>A property is created with name </span><b><span lang=EN-GB
style='font-family:"Courier New"'>callee</span></b><span lang=EN-GB> and
property attributes { [[Writable]]: false, [[Enumerable]]: false, [[Flexible]]:
false }. The initial value of this property is the Function object being
executed. This allows anonymous functions to be recursive.<o:p></o:p></span></p>

<p class=BulletNotlast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>A property is created with name </span><b><span lang=EN-GB
style='font-family:"Courier New"'>length</span></b><span lang=EN-GB> and
property attributes { [[Enumerable]]: false }. The initial value of this
property is the number of actual parameter values supplied by the caller.<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>For each non-negative integer, <i>arg</i>, less than the value of
the </span><b><span lang=EN-GB style='font-family:"Courier New"'>length</span></b><span
lang=EN-GB> property, a property is created with name ToString(<i>arg</i>) and
property attributes { [[Writable]]: true, [[Enumerable]]: false, [[Flexible]]:
false }. The initial value of this property is the value of the corresponding
actual parameter supplied by the caller. The first actual parameter value
corresponds to <i>arg</i> = 0, the second to <i>arg</i> = 1, and so on. In the
case when <i>arg</i> is less than the number of formal parameters for the
Function object, this property shares its value with the corresponding property
of the activation object. This means that changing this property changes the
corresponding property of the activation object and vice versa.<a
name="_Toc381513670"></a><a name="_Toc382202813"></a><a name="_Toc382203033"></a><a
name="_Toc382212192"></a><a name="_Toc382212431"></a><a name="_Toc382291537"></a><a
name="_Toc385672176"></a><a name="_Toc393690271"></a><o:p></o:p></span></p>

<h4><a name="_Toc472818809"></a><a name="_Ref458336697"></a><span lang=EN-GB>10.1.8.1&nbsp;&nbsp;&nbsp;
Usage Subset </span><span lang=EN-GB style='font-family:"Courier New"'>cautious</span><span
lang=EN-GB> Restrictions<o:p></o:p></span></h4>

<p class=M4><span lang=EN-GB>For functions defined within an execution subset
restricted to the </span><span lang=EN-GB style='font-family:"Courier New"'>cautious</span><span
lang=EN-GB> subset, an arguments object is only created if the function
mentions &#8220;arguments&#8221; freely in its body. <o:p></o:p></span></p>

<p class=M4><span lang=EN-GB>If a arguments object is created, a </span><span
lang=EN-GB style='font-family:"Courier New"'>callee</span><span lang=EN-GB>
property is not created.<o:p></o:p></span></p>

<p class=M4><span lang=EN-GB>The arguments object does not share properties
with the activation object. Changing the value of a arguments object property
does not change the value of the corresponding activation object property and
vice versa.<o:p></o:p></span></p>

<h2><a name="_Toc202942792"><span lang=EN-GB>10.2&nbsp;&nbsp;&nbsp;&nbsp;
Entering An Execution Contex</span></a><span lang=EN-GB>t<o:p></o:p></span></h2>

<p class=M2><span lang=EN-GB>Every function and constructor call enters a new
execution context, even if a function is calling itself recursively. Every
evalution of a <i>Block</i> enters enters a new execution context which is
exited when the block evaluation completes. Every return exits an execution
context. A thrown exception, if not caught, may also exit one or more execution
contexts.<o:p></o:p></span></p>

<p class=M2><span lang=EN-GB>When control enters an execution context, the
scope chain is created and initialised, environment bindings instantiation is
performed, and the <b>this</b> value is determined.<o:p></o:p></span></p>

<p class=M2><span lang=EN-GB>The initialisation of the scope chain, environment
bindings instantiation, and the determination of the <b>this</b> value depend
on the type of code being entered.<a name="_Toc381513671"></a><a
name="_Toc382202814"></a><a name="_Toc382203034"></a><a name="_Toc382212193"></a><a
name="_Toc382212432"></a><a name="_Toc382291538"></a><a name="_Toc385672177"></a><a
name="_Toc393690272"></a><o:p></o:p></span></p>

<h3><a name="_Toc202942793"></a><a name="_Toc472818810"></a><span lang=EN-GB>10.2.1&nbsp;&nbsp;&nbsp;&nbsp;
Global Cod</span><span lang=EN-GB>e<o:p></o:p></span></h3>

<p class=BulletNotlast style='margin-left:56.7pt;text-indent:0in'><span
lang=EN-GB>The scope chain is created and initialised to contain the global
object and no others.<o:p></o:p></span></p>

<p class=BulletNotlast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>Environment bindings instantiation is performed using the global
object as the environment object and using property attributes { [[Writable]]:
true, [[Enumerable]]: true, [[Flexible]]: false }.<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:56.7pt;text-indent:0in'><span
lang=EN-GB>The <b>this</b> value is the global object.<a name="_Toc381513672"></a><a
name="_Toc382202815"></a><a name="_Toc382203035"></a><a name="_Toc382212194"></a><a
name="_Toc382212433"></a><a name="_Toc382291539"></a><a name="_Toc385672178"></a><a
name="_Toc393690273"></a><o:p></o:p></span></p>

<h3><a name="_Toc202942794"></a><a name="_Ref458336782"></a><a
name="_Toc472818811"></a><span lang=EN-GB>10.2.2&nbsp;&nbsp;&nbsp;&nbsp; Eval
Cod</span><span lang=EN-GB>e<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>When control enters an execution context for eval
code, the previous active execution context, referred to as the <i>calling
context</i>, is used to determine the scope chain, the environment object, and
the <b>this</b> value. If there is no calling context, then initialising the
scope chain, environment bindings instantiation, and determination of the <b>this</b>
value are performed just as for global code.<o:p></o:p></span></p>

<p class=BulletNotlast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>The scope chain is initialised to contain the same objects, in the
same order, as the calling context's scope chain. This includes objects added to
the calling context's scope chain by <i>Blocks</i>,&nbsp; </span><b><span
lang=EN-GB style='font-family:"Courier New"'>with</span></b><span lang=EN-GB>
statements and </span><b><span lang=EN-GB style='font-family:"Courier New"'>catch</span></b><span
lang=EN-GB> clauses.<o:p></o:p></span></p>

<p class=BulletNotlast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>Environment bindings instantiation is performed using the calling
context's environment object and using the property attributes { [[Writable]]:
true, [[Enumerable]]: true, [[Flexible]]: true }.<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:56.7pt;text-indent:0in'><span
lang=EN-GB>The <b>this</b> value is the same as the <b>this</b> value of the
calling context.<a name="_Toc381513673"></a><a name="_Toc382202816"></a><a
name="_Toc382203036"></a><a name="_Toc382212195"></a><a name="_Toc382212434"></a><a
name="_Toc382291540"></a><a name="_Toc385672179"></a><a name="_Toc393690274"></a><o:p></o:p></span></p>

<h4><span lang=EN-GB>10.2.2.1&nbsp;&nbsp;&nbsp; Usage Subset </span><span
lang=EN-GB style='font-family:"Courier New"'>cautious</span><span lang=EN-GB>
Restrictions<o:p></o:p></span></h4>

<p class=M4><span lang=EN-GB>If either the execution context for the eval code or
the execution context in which the eval operator was executed is subset
restricted to the </span><span lang=EN-GB style='font-family:"Courier New"'>cautious</span><span
lang=EN-GB> subset, the eval code cannot instantiate variables, functions, or
constants in the lexical context of its eval operator.<o:p></o:p></span></p>

<p class=M4><span lang=EN-GB>Instead, a new environment object is created and
appended to the head of the calling context&#8217;s scope chain and that
environment object is used for environment bindings instantiation of the eval
code.<o:p></o:p></span></p>

<h3><a name="_Toc202942795"></a><a name="_Ref457703968"></a><a
name="_Ref457707526"></a><a name="_Toc472818812"></a><span lang=EN-GB>10.2.3&nbsp;&nbsp;&nbsp;&nbsp;
Function Cod</span><span lang=EN-GB>e<o:p></o:p></span></h3>

<p class=BulletNotlast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>The scope chain is initialised to contain the activation object followed
by the objects in the scope chain stored in the [[Scope]] property of the
Function object.<o:p></o:p></span></p>

<p class=BulletNotlast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>Environment bindings instantiation is performed using the activation
object as the environment object and using property attributes { [[Writable]]:
true, [[Enumerable]]: true, [[Flexible]]: false }.<o:p></o:p></span></p>

<p class=BulletLast style='margin-left:70.9pt;text-indent:-14.2pt'><span
lang=EN-GB>The caller provides the <b>this</b> value.<a name="_Toc381513674"></a><a
name="_Toc382202817"></a><a name="_Toc382203037"></a><a name="_Toc382212196"></a><a
name="_Toc382212435"></a><a name="_Toc382291541"></a><a name="_Toc385672180"></a><a
name="_Toc393690275"></a><a name="_Ref404493379"></a><o:p></o:p></span></p>

<h3><span lang=EN-GB>10.2.4&nbsp;&nbsp;&nbsp;&nbsp; Lexical Block Code<o:p></o:p></span></h3>

<p class=M3><span lang=EN-GB>A new activation object is created for use as the
environment object. The scope chain is initialised to contain the new
activation object followed by the objects in the current execution
context&#8217;s scope chain.<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>Environment bindings instantiation is performed
using the new object as the environment object and using property attributes {
[[Writable]]: false, [[Enumerable]]: false, [[Flexible]]: false }.<o:p></o:p></span></p>

<p class=M3><span lang=EN-GB>The <b>this</b> value is the same as the <b>this</b>
value of the previously current context.<o:p></o:p></span></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

</body>

</html>