訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
操作がECMAScriptの実行可能コードに翻訳される際には、操作は、実行コンテキストを入力しています。 スタックから論理的な実行コンテキストをアクティブにします。 この論理的なスタックにおける1番上の実行コンテキストは、実行コンテキストを実行中にします。 操作時、常に生成される新たな実行コンテキストは、実行コンテキストと関連付けられていない実行可能コードに現在実行中の実行コンテキストを関連付けた実行可能コードから翻訳されます。 新たに生成した実行コンテキストは、スタック上にプッシュされ、実行中の実行コンテキストになります。 いかなる状態においても実行コンテキストは、その関連付けたコードの実行経過を追跡する必要があります。 追記すると各実行コンテキストは、Table 19 に挙げた状態コンポーネントを持ちます。
Table 19 -- 実行コンテキストの状態コンポーネント ------------------------------------------------------------------------------------------------------------- コンポーネント 目的 ------------------------------------------------------------------------------------------------------------- LexicalEnvironment 識別子参照を解決する為に使用した識別子Lexical Environment(語彙環境)は、この実行コンテキスト内にあるコードによって作成される VariableEnvironment 環境レコードである識別子Lexical Environmentは、この実行コンテキスト内にあるVariableStatements と FunctionDeclarationsによって生成したバインディングを保持する ThisBinding この実行コンテキストと関連付けたECMAScriptコード内にあるthisキーワードと関連付けた値 -------------------------------------------------------------------------------------------------------------
実行コンテキストとしてのLexicalEnvironment と VariableEnvironmentコンポーネントは、常に語彙的な環境です。 実行コンテキストが当該LexicalEnvironment と VariableEnvironmentコンポーネントを生成する場合には、最初に同じ値を持ちます。 VariableEnvironmentコンポーネントの値は、LexicalEnvironmentコンポーネントの値が実行コンテキスト内にあるコードの実行中に変更する可能性がある間は、決して変更されません。 多くの状況においては、唯一実行中の実行コンテキスト(実行コンテキストスタックの最上段)はこの仕様内にあるアルゴリズムによって直接操作されます。 その為、 用語 "LexicalEnvironment"、"VariableEnvironment"、"ThisBinding" は、実行中の実行コンテキストのそれらコンポーネントへの参照について必要となる資格なしで使用されます。 実行コンテキストは、単に仕様上の仕組みであり、ECMAScript実装の一部の特定の人為的なものと一致する必要はありません。 ECMAScriptプログラムにおいては実行コンテキストにアクセスすることは不可能です。
識別子の解決とは、実行中の実行コンテキストのLexicalEnvironmentを使用して識別子としてバインディングすることを決定している過程です。 ECMAScriptコードの実行中、構文上のプロダクションは、PrimaryExpression、識別子は次のアルゴリズムを使用して評価されます。
1.envは、実行中の実行コンテキストのLexicalEnvironmentとする 2.評価中に構文上のプロダクションが、strict(厳格)モードのコード内に含まれる場合には、strictをtrueとし、それ以外は、strictをfalseとする 3.引数としてenv、Identifier、strictを渡してGetIdentifierReference関数を呼ぶことによって結果を返す
評価中の識別子の結果は、常にString型のIdentifier(識別子)と等しい名称の参照するコンポーネントであるReference型の値です。