Jsスコープが詳細であり、アクティブなオブジェクト実行コンテキストが詳細に説明されている、Xiaobaiは理解できます!

最初に数行のコードを示します;
var demo =“ ian”;
function fuc(){
console.log(demo); //結果:ian
}
fuc();

明らかにfuc()は全世界でデモを出力します。以下は分析の原則に焦点を当てています。

最初に、実行コンテキスト(実行コンテキスト)と呼ばれる用語を理解します。これを実行コンテキストと呼ぶ人もいます。実行環境には、関数(グローバル)のすべての変数と関数名が含まれています。関数が実行を開始するたびに、すべてのコードが実行されると破棄される実行環境が生成されます(プログラムの終了後にグローバル環境は破棄されます)。

実行環境を作成すると、スコープチェーンスコープが作成されさまざまなスコープがスコープチェーンによってリンクされます。実行環境が作成された後、これはグローバルに存在しない引数を使用してアクティブオブジェクトを作成します。スコープチェーンのフロントエンド(0)は常に現在の関数オブジェクト(グローバル実行環境はウィンドウ)であり、後続のスコープチェーンのスコープ内の属性値です。
その後、上記の関数は栗を与えます。
ここに画像の説明を挿入

元の質問に戻ります:fun関数のスコープ(scop [0])にはデモ変数はありませんが、スコープチェーンに沿って要素を検索し続け、グローバルスコープ(scop [1])でデモを見つけます。そして印刷すると、結果は「ian」になります。

AO——アクティベーションオブジェクト

関数の実行の直前に生成されたアクティブオブジェクト。次のコードを参照してください
console.log(x);
var x = 5;

//結果:未定義;

fuc1();
function fuc1(){
var a = 1;
console.log(a);
console.log(b);
var b = 2;
console.log(b);
}

// result:1 undefined

上記の2つの質問には、変数宣言の昇格と関数宣言の全体的な昇格という教師の要約式があります。以下の原則を見てみましょう:
AO(グローバルにGOと呼ばれます)は、関数が実行されるたびに生成されます。次の手順に従います
。1. AOオブジェクトを作成します;
2.変数宣言と仮パラメーターを検索します。プロパティ、プロパティ値は未定義
3.仮パラメーターは統一されています
。4.関数宣言を見つけます。関数名はAOオブジェクトのプロパティです。プロパティ値は未定義です
。上記の関数を使用して栗を作成します。

1.最初にAOオブジェクト
AO {}を作成します

2.変数の宣言と仮パラメーターを検索します
。AO{a:undifined;
b:undifined
} //この例では、変数aとbのみに仮パラメーターがありません。

3.仮パラメーターの統合
AO {a:undifined;
b:undifined
} //この例には実際のパラメーターがないため、このステップの後は前と比べて変化はありません

4関数宣言を見つけます
AO {a:undifined;
b:undifined
}
//この例の関数は新しい関数を宣言していません

次に、JSのルールに従って関数のコードを上から下に
実行します。最初にa = 1を実行します。*注:ここでvar a = 1をvar aに分割します。a= 1;変数が宣言されたので、ここで値をokに割り当てるだけです。

実行後のAOは、{
a:1;
b:undifined
} です

次に、console.logの実行を続行します(a); //結果:1を出力して
から、console.log(b);を実行します//結果:未定義で
実行しますb = 2:
AO is:{
a:1;
b:2;
}

次にconsole.log(b);を実行します//結果:2

作者も初心者の新人ですが、言葉遣いが厳密でないところもありますので、ご容赦ください

@author:JFlyhak
@email:[email protected]

元の記事を3件公開 いいね5 Visits168

おすすめ

転載: blog.csdn.net/qq_44621394/article/details/90245635