回答:
ルーツから始めましょう...
実行コンテキストは、次のもので構成されるオブジェクトです。
this
値変数オブジェクトは抽象的なもので、次のいずれかです。
window
、document
またはconsole
ブラウザ内)が存在する場所アクティベーションオブジェクトは、以下を保持するオブジェクトです。
arguments
この関数のオブジェクトしたがって、アクティベーションオブジェクトは、変数オブジェクトの特殊なケースにすぎません。
基本的に、関数内の名前でアクセスできるすべてのローカルなもののコンテナですthis
。ただし、私はここで不正確かもしれませんが、それはそうだと思います。
いくつかの素敵な写真を使用した詳細な説明:
Activationオブジェクトは、実行中の関数の環境とスコープを記述するプロパティを保持するために使用されるオブジェクトです。たとえば、関数の引数が保存されるのはこのオブジェクトです。定義上、何かを有効化するということは、そのことを機能させたり機能させたりすることです。そのため、「Activation object」、「FUNCTION」オブジェクト、またはさらに良いことに、機能に対してローカルなルートオブジェクト(つまり、FUNCTION LOCAL OBJECT)を聞いたとき。
Variableオブジェクトに関して、Activationオブジェクトは、多かれ少なかれVariableオブジェクトの具体的なインスタンスであり、それ自体(ここではVariableオブジェクトを指します)はABSTRACTオブジェクトタイプです。ここで述べたように ...
「変数オブジェクト」という用語は、現在実行されているコンテキストの環境と範囲を記述するプロパティを保持するオブジェクトを指すために使用される一般的な用語または抽象的な用語です。
したがって、グローバル実行コンテキストの環境およびスコープ内(つまり、関数の外部)では、グローバルオブジェクトは変数オブジェクトです。ブラウザーでは、グローバルまたは最も外側の実行環境はブラウザーWINDOWであるためwindow
、最終的に変数オブジェクトとして使用されるのはオブジェクトです。これがvar
、関数の外側でキーワードを使用して宣言された変数がwindow
オブジェクトで終わる理由です。
ただし、関数のスコープでは、変数オブジェクトであるのはActivationオブジェクト(関数ローカルオブジェクト)です。これは、実行中の関数のスコープを記述するプロパティを格納するために使用されるのはこのオブジェクトだからです。