訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
Globalコードやeval関数(15.1.2.1)使用中のコードが、確立し、新たな実行コンテキストを入力します。 関数が自身を再帰的に呼ぶ場合でさえ、ECMAScriptコードの関数(13.2.1)の呼び出しごとに確立し、新たな実行コンテキストを入力します。 各リターンは、任意の実行コンテキストを抜けます。 例外を投げる(スローする)と、1つ以上の実行コンテキストを抜ける場合もあります。 操作が実行コンテキストを入力する場合、当該実行コンテキストのThisBindingが設定され、そのVariableEnvironmentと初期のLexicalEnvironmentが定義され、宣言型バインディングのインスタンス化(10.5)が実行されます。 これらアクションにおける正確な動作は、入力されるコードの種類に依存して発生します。
次のステップは、操作がGlobalコードにおける実行コンテキストを入力する場合に実行されます。
1. 10.4.1.1で定義したようにGlobalコードを使用して実行コンテキストを初期化 2.Globalコードを使用して 10.5 で定義したように宣言型バインディングのインスタンス化を実行
次のステップは、ECMAScriptコード C におけるGlobal実行コンテキストを初期化する為に実行されます。
1.VariableEnvironmentにGlobal環境を設定 2.LexicalEnvironmentにGlobal環境を設定 3.ThisBindingにGlobalオブジェクトを設定
次のステップは、操作がevalコードにおける実行コンテキストを入力する場合に実行されます。
1.呼ぶコンテキストがなかったり、evalコードが、eval関数を直接呼ぶ(15.1.2.1.1)ことによって評価されない場合には、 a. 10.4.1.1.で定義した C と同じevalコードを使用中のGlobal実行コンテキストであったかのように実行コンテキストを初期化 2.Else, a.実行コンテキストを呼び出すことによるThisBindingと同じ値をThisBindingに設定 b.実行コンテキストを呼び出すことによるLexicalEnvironmentと同じ値をLexicalEnvironmentに設定 c.実行コンテキストを呼び出すことによるVariableEnvironmentと同じ値をVariableEnvironmentに設定 3.evalコードがstrict(厳格)コードである場合、 a.strictVarEnvは、引数としてLexicalEnvironmentを渡すことによってNewDeclarativeEnvironmentを呼んだ結果とする b.LexicalEnvironmentにstrictVarEnvを設定 c.VariableEnvironmentにstrictVarEnvを設定 4.evalコード使用して 10.5 で定義したように宣言型バインディングのインスタンス化を実行
evalコードは、仮にコンテキストを呼んだ結果としてのコードであったり、evalコードがstrict(厳格)コードであった場合でもevalを実行したコンテキストを呼ぶことによる変数環境にある変数や関数バインディングをインスタンス化することはできません。 代わりにそのようなバインディングは、evalコードに唯一アクセス可能である新たなVariableEnvironment内でインスタンス化されます。
次のステップは、操作が、オブジェクト F 内に含まれる関数コードにおける実行コンテキストを入力する際、callerがthisArgを提供または、callerがargumentsListを提供する場合に実行されます。
1.関数コードがstrict(厳格)コードである場合、ThisBindingにthisArgを設定 2.thisArgがnullまたは、undefinedである場合、ThisBindingにGlobalオブジェクトを設定 3.Type(thisArg)が、Object型ではない場合、ThisBindingにToObject(thisArg)を設定 4.それ以外の場合、ThisBindingにthisArgを設定 5.localEnvは、引数として F の[[Scope]]内部プロパティの値を渡すことによってNewDeclarativeEnvironmentを呼んだ結果とする 6.LexicalEnvironmentにlocalEnvを設定 7.VariableEnvironmentにlocalEnvを設定 8.codeは、Fの[[Code]]内部プロパティの値とする 9. 10.5で説明したように関数コードcodeとargumentsListを使用して宣言型バインディングのインスタンス化を実行