質問

「Activation Object」という用語は、「変数オブジェクト」の別の名前ですか、それとも実際にそれらの間に違いはありますか?私は、実行コンテキストで可変スコープがどのように形成されるかについてのJavaScriptの記事をいくつか読んでいます。私の観点からは、ほとんどの記事でこれら2つの用語を同じ意味で使用しているようです。

役に立ちましたか?

解決

まあ、私はちょうど何かを学んだ:)。から この記事, 、それはそう思われます 関数の実行コンテキスト内, 、アクティベーションオブジェクトは、可変オブジェクトとして使用されます。

実行コンテキストが作成されると、定義された順序で多くのことが起こります。まず、関数の実行コンテキストでは、「アクティベーション」オブジェクトが作成されます。 [...

次に、ECMA 262が「変数」オブジェクトと呼ぶオブジェクトを使用して、「可変インスタンス化」のプロセスが行われます。ただし、アクティベーションオブジェクトは変数オブジェクトとして使用されます(これに注意してください、それは重要です:それらは同じオブジェクトです)。変数オブジェクトの名前付きプロパティは、関数の正式なパラメーターごとに作成され、関数呼び出しの引数がそれらのパラメーターに対応する場合、それらの引数の値はプロパティに割り当てられます(それ以外の場合、割り当てられた値は未定義です)。

ただし、グローバル範囲にある場合、アクティベーションオブジェクトはないため、グローバルオブジェクトは代わりに可変オブジェクトとして使用されます。

グローバル実行コンテキストは、引数がないため、わずかに異なる処理を取得するため、それらを参照するために定義されたアクティベーションオブジェクトは必要ありません。 [...]グローバルオブジェクトは変数オブジェクトとして使用されているため、グローバルに宣言された関数がグローバルオブジェクトのプロパティになります。

したがって、「アクティベーションオブジェクト」と「可変オブジェクト」は、関数コンテキスト内で同じものであるように聞こえますが、グローバルコンテキスト内ではそうではありません。

他のヒント

an アクティベーションオブジェクト aの最上部のオブジェクトです スコープチェーン 最下部の存在で グローバルオブジェクト。一方 可変オブジェクト 抽象的な概念であり、したがって、その実行コンテキストに応じて、 スコープチェーン 含む アクティベーション/グローバルオブジェクト.


を含む:

  • 全ての 変数と関数 関数本文内で宣言します。
  • 名前の引数 関数署名で指定されているとおり。
  • としての議論 名前のオブジェクト arguments (関数に複数の署名をサポートする場合)。

含まれていません:

  • this (変数ではないため);
  • 名前が付けられました 関数式.

詳細 - JavaScript。コア。

の場合の引用はほとんどありません tl; dr:

a 可変オブジェクト aです データの範囲 実行コンテキストに関連しています。それは 特別なオブジェクト コンテキストに関連付けられており、どの保存変数と関数宣言がコンテキスト内で定義されています。

a 可変オブジェクト です 抽象的な概念. 。さまざまなコンテキストタイプで、物理的には、異なるオブジェクトを使用して提示されます。

..]グローバルな文脈で 可変オブジェクト それは グローバルオブジェクト それ自体[..

..]関数 可変オブジェクト 同じシンプルです 可変オブジェクト, 、しかしそれ以外に 変数関数宣言, 、保管しています 正式なパラメーターarguments オブジェクト、そしてと呼ばれます アクティベーションオブジェクト.

..]アクセス時 this コードでは、その値はから直接取得されます 実行コンテキスト 何もありません スコープチェーン 調べる。

アクティベーションオブジェクトは変数オブジェクトの一種であると言う方が正確です。これは、人間が人間の一種である方法に似ています。述べたように ここ, 、「変数オブジェクト」という用語は、現在実行中のコンテキストの環境と範囲を記述するプロパティを保持するオブジェクトを記述するために使用される一般化された用語です。

したがって、グローバル実行コンテキスト(すなわち、関数以外)内で、最終的にはグローバルオブジェクトになります。なんで?グローバル実行コンテキストの環境と範囲を記述するプロパティを保持するのはオブジェクトだからです。

一方、ローカル実行コンテキスト(すなわち、関数内)内では、現在の環境と範囲を記述するプロパティを保持するオブジェクトであるため、変数オブジェクトである関数ローカルオブジェクト(AKAアクティベーションオブジェクト)が変数オブジェクトです。機能の実行。たとえば、関数引数などのプロパティ。

アクティブ化されたオブジェクトは、イベントが発生したWebページ上の要素を表すオブジェクトを意味します。そのため、画像がクリックされた場合、その画像を表すJavaScriptオブジェクトはアクティブ化されたオブジェクトです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top