真の偉大な神は知識を整然と話すことができます!、巨人の肩の上に立って、
学習アドレスを学ぶhttps://github.com/mqyqingfeng/Blog
ステートメント:写真と内容は上記のリンクから取得されました。ここでは、研究ノートを記録しているだけです。完全版については、上記のリンクを参照してください。
JavaScriptコードが実行可能コード(実行可能コード)を実行すると、対応する実行コンテキスト(実行コンテキスト)が作成されます
各実行コンテキストには、3つの重要な属性があります
。-変数オブジェクト(変数オブジェクト、VO
)
- スコープチェーン(スコープチェーン)-this
可変オブジェクト
フォーカス:変数オブジェクトを作成するプロセス
変数オブジェクトは、実行コンテキストに関連するデータスコープであり、コンテキストで定義された変数と関数宣言を格納します。
実行コンテキストが異なる変数オブジェクトは少し異なります。
グローバルコンテキストの変数オブジェクトはグローバルオブジェクトウィンドウです
関数のコンテキストでは、アクティベーションオブジェクト(AO)は変数オブジェクトを表すために使用されます。
アクティブオブジェクトと変数オブジェクトは実際には同じものですが、変数オブジェクトはエンジンによって標準化または実装されており、JavaScript環境ではアクセスできません。実行コンテキストに入るときのみ、実行コンテキストの変数オブジェクトはアクティブ化。これはアクティブ化オブジェクトと呼ばれ、アクティブ化された変数オブジェクト、つまりアクティブオブジェクトのさまざまな属性のみにアクセスできます。??
アクティブなオブジェクトは、関数のコンテキストに入るときに作成され、関数のarguments
プロパティによって初期化されます。arguments
属性値があるArguments
オブジェクト。
実行プロセス:
1.実行コンテキストを入力します(分析フェーズ)2.コード実行(実行フェーズ)の
例:
function foo(a) {
var b = 2;
function c() {}
var d = function() {};
b = 3;
}
foo(1);
実行コンテキストに入ると、AOは
AO = {
arguments: {
0: 1,
length: 1
},
a: 1,
b: undefined,
c: refrence to function c() {},
d: undefined
}
コード実行段階では、コードが順次実行され、変数オブジェクトの値がコードに応じて変更されます
上記の例を実行すると、このときのAOは次のようになります。
AO = {
arguments: {
0: 1,
length: 1
},
a: 1,
b: 3,
c: refrence to function c() {},
d: refrence to FunctionExpression "d"
}
概要:
1.グローバルコンテキストの変数オブジェクトの初期化はグローバルオブジェクトです
2.関数コンテキストの変数オブジェクトの初期化には、Argumentsオブジェクトのみが含まれます
3.実行コンテキストに入ると、仮パラメーター、関数宣言、変数宣言などの初期属性値が変数オブジェクトに追加されます
4.コード実行段階で、変数オブジェクトの属性値が再度変更されます
console.log(foo);
function foo(){
console.log("foo");
}
var foo = 1;
未定義の代わりに関数を出力します
これは、実行コンテキストに入るときに、関数宣言が最初に処理され、変数宣言が2番目に処理されるためです。変数名が宣言されている仮パラメーターまたは関数と同じである場合、変数宣言は既存のプロパティに影響しません。