10.1 実行コードの型・種類
ECMAScriptの実行コードの種類には、3つあります(Global コード / Eval コード / Function コード)。
- Global コードは、ECMAScriptのProgramとして扱われるソーステキストです。固有のProgramのグローバルなコードは、FunctionBody(関数本体)の一部として解釈される一部のソーステキストを含みません。
- Eval コードは、組み込み eval 関数に提供されるソーステキストです。より正確には、組み込み eval 関数へのパラメータがString型である場合、ECMAScriptのProgramとして扱われます。特定の eval の呼び出しにおける evalのコードは、Programのグローバルコード部分です。
- Function コードは、FunctionBody(関数本体)の一部として解釈されるソーステキストです。特定のFunctionBodyの関数のコードは、ネストしたFunctionBodyの一部として解釈される一部のソーステキストを含みません。FunctionBodyの関数のコードは、コンストラクタとして組み込み Function オブジェクトを利用する場合に提供されるソーステキストであることをも意味します。より正確には、Functionコンストラクタに提供される最後のパラメータは、String型に変換され、FunctionBodyとして扱われます。Functionコンストラクタに提供されるパラメータが1つ以上ある場合には、最後の1つを除く全てのパラメータは、Strings型に変換、結合され、カンマで区切られます。結果となるString型は、最後のパラメータによって定義したFunctionBodyにおけるFormalParameterListとして解釈されます。Functionの特定のインスタンス化における関数のコードは、FunctionBodyの一部として解釈される一部のソーステキストを含みません。
10.1.1 Strictモードのコード
ECMAScriptプログラムの構文上の単位は、無制限またはstrict(厳格)モードの構文とセマンティックに使用されて処理される場合があります。
ECMAScriptコードの3つのタイプが、strict(厳格)モードを使って処理される場合には、strict global(厳格なグローバル)コード、strict eval(厳格な評価)コード、strict function(厳格な関数)コードとして参照されます。
コードは、次の状況においてはstrict(厳格)モードのコードとして解釈されます。
- Globalコードは、Use Strict Directive ( 14.1 参照)を含むDirective Prologueで始まる場合には、strict(厳格)グローバルコードです。
- Evalコードは、Use Strict 指定 を含む Directive Prologue で始まる場合やevalの呼び出しがstrict(厳格)モードのコード内に含まれる eval 関数への直接呼び出し( 15.1.2.1.1 参照)である場合、strict(厳格)evalコードです。
- FunctionDeclaration(関数宣言)、FunctionExpression(関数の式)やアクセサPropertyAssignment(プロパティの関連付け)の一部であるFunctionコードは、そのFunctionDeclaration、FunctionExpressionやPropertyAssignmentがstrict(厳格)モードのコードに含まれる場合や関数のコードが、 Use Strict Directive を含む Directive Prologue で始まる場合、strict(厳格)関数コードです。
- 組み込みFunctionコンストラクタへの最後の引数として提供される関数のコードは、その最後の引数がString型であり、Use Strict Directiveを含むDirective Prologueで始まるFunctionBody(関数本体)として処理される場合、strict(厳格)関数のコードです。
[注:] Use Strict Directive と Directive Prologue
Use Strict Directive
Use Strict ディレクティブ(指定・指示・命令)
'use strict'
"use strict"
によるstrict モードの指定
Directive Prologue
指定(指示・命令)プロローグ(序章・前置)
前置指定