JavaScriptのアクティベーションオブジェクトとは何ですか?


13

特定の実行コンテキストでは、変数オブジェクトはその実行コンテキストのアクティベーションオブジェクトです。

オンラインでの調査から、以前の文をさまざまな方法で言い換えることができますが、誰もそれが何であるかを知ることができません。

Activationオブジェクトとは何ですか?


アクティベーションオブジェクトは、最上の目的であるスコープ鎖最下があるとグローバルオブジェクト。詳細については、この回答を参照してください。
イカルス14年

回答:


17

ルーツから始めましょう...

実行コンテキストは、次のもので構成されるオブジェクトです。

  • 関数の場合の起動オブジェクトである変数オブジェクト
  • スコープチェーン。外部スコープのリンクリストと考えることができます。
  • this

変数オブジェクトは抽象的なもので、次のいずれかです。

  • グローバルオブジェクト(グローバルコンテキスト内)-グローバル変数(などwindowdocumentまたはconsoleブラウザ内)が存在する場所
  • アクティベーションオブジェクト(ECMAScriptでスコープを定義する関数用)

アクティベーションオブジェクトは、以下を保持するオブジェクトです。

  • 関数の正式な引数
  • arguments この関数のオブジェクト
  • この関数内のvarsおよび(名前付き)関数

したがって、アクティベーションオブジェクトは、変数オブジェクトの特殊なケースにすぎません。

基本的に、関数内の名前でアクセスできるすべてのローカルなもののコンテナですthis。ただし、私はここで不正確かもしれませんが、それはそうだと思います。

いくつかの素敵な写真を使用した詳細な説明:


2

Activationオブジェクトは、実行中の関数の環境とスコープを記述するプロパティを保持するために使用されるオブジェクトです。たとえば、関数の引数が保存されるのはこのオブジェクトです。定義上、何かを有効化するということは、そのことを機能させたり機能させたりすることです。そのため、「Activation object」、「FUNCTION」オブジェクト、またはさらに良いことに、機能に対してローカルなルートオブジェクト(つまり、FUNCTION LOCAL OBJECT)を聞いたとき。

Variableオブジェクトに関して、Activationオブジェクトは、多かれ少なかれVariableオブジェクトの具体的なインスタンスであり、それ自体(ここではVariableオブジェクトを指します)はABSTRACTオブジェクトタイプです。ここで述べたように ...

「変数オブジェクト」という用語は、現在実行されているコンテキストの環境と範囲を記述するプロパティを保持するオブジェクトを指すために使用される一般的な用語または抽象的な用語です。

したがって、グローバル実行コンテキストの環境およびスコープ内(つまり、関数の外部)では、グローバルオブジェクトは変数オブジェクトです。ブラウザーでは、グローバルまたは最も外側の実行環境はブラウザーWINDOWであるためwindow、最終的に変数オブジェクトとして使用されるのはオブジェクトです。これがvar、関数の外側でキーワードを使用して宣言された変数がwindowオブジェクトで終わる理由です。

ただし、関数のスコープでは、変数オブジェクトであるのはActivationオブジェクト(関数ローカルオブジェクト)です。これは、実行中の関数のスコープを記述するプロパティを格納するために使用されるのはこのオブジェクトだからです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.