1. 各 JavaScript 関数は Function オブジェクトのインスタンスであり、このオブジェクトには Function オブジェクトのみがアクセスできる関数があります。 JavaScript エンジン。内部属性 [[Scope]]。この [[Scope]] にはスコープのコレクションが格納されます。このコレクションは「スコープ チェーン」と呼ばれます。コレクションには「変数オブジェクト」VO または「アクティブ オブジェクト」AO( AO VO よりも this 属性と argument 属性が多くあります)。
2. 関数が作成されると、その親スコープのスコープ チェーン内のすべての可変オブジェクトが追加されます。その [[スコープ]] (親スコープがグローバルの場合、現在の関数のスコープ チェーンにグローバル オブジェクトが 1 つだけ追加されます)。
3. 関数が実行されると、関数の実行環境が環境スタックにプッシュされます。 p>
1. この時点で、関数の変数初期化フェーズに入ります。このフェーズでは、関数の内部情報 (この値、関数パラメータ、関数宣言、変数宣言、および引数) が決定されます。これらの値に基づいて、現在の関数のアクティブ オブジェクト AO が形成されます。AO オブジェクトは、現在の関数スコープ チェーンの先頭に保存されます。
注: AO は次の順序で入力されます:
1. 関数パラメータ (パラメータが渡された場合は値が割り当てられ、パラメータが渡されなかった場合は初期値は未定義)、2 番目の優先度
2. 関数宣言(名前の競合が発生した場合は上書きされます)が最優先
3. 変数宣言(変数の値を未定義に初期化、名前の競合が発生した場合は無視されます) 第3優先
2. 次に、関数の実行段階になります。この段階では、現在の関数で使用されているすべての変数と関数宣言が、現在の関数の [[Scope]] スコープ チェーンから検索されます。オブジェクトの位置に従って、現在の関数で使用されます。スコープ チェーンにある場合、最初に検索されます。現在の関数の AO オブジェクトが上位レベルのオブジェクトを検索しない場合は、最終的にグローバル オブジェクトが見つかります。存在しない場合は、エラーが報告されます (変数は未定義)。
上記JavaScript関数の実行処理は全てエディタで共有する内容となっておりますので、ご参考になれば幸いです、またスクリプトホームへの対応もよろしくお願いいたします。