1.各javaScript関数は、関数オブジェクトのインスタンスです。 JavaScriptエンジンにのみアクセスできる内部プロパティ[[scope]]があります。この[[scope]]は、「スコープチェーン」と呼ばれるスコープコレクションを保存し、コレクションは「可変オブジェクト」voまたは「アクティブオブジェクト」AOを保存します(aoには、voよりもこのおよび引数プロパティがあります)。
2。関数が作成されると、親スコープのスコープチェーン内のすべての可変オブジェクトが[[scope]]に追加されます(親スコープがグローバルの場合、1つのグローバルオブジェクトのみが現在の関数のスコープチェーンに追加されます)。
3.関数が実行されると、関数の実行環境が環境スタックにプッシュされます。
1。この時点で、関数の可変初期化段階が入ります。この段階は、この値、関数パラメーター、関数宣言、変数宣言、および引数の内部関数を決定します。これらの値に基づいて、現在の関数のアクティブオブジェクトAOが構成され、AOオブジェクトは現在の関数スコープチェーンの最初の位置に保存されます。
注:AOは次の順序で満たされています。
1。関数パラメーター(パラメーターが渡された場合、それは割り当てられます。パラメーターが渡されない場合、初期化値は未定義です)2番目の優先度はです。
2。関数宣言(ライフ名の競合が発生した場合、オーバーライドされます)最優先事項は次のとおりです。
3.変数宣言(初期化変数値は未定義です、ライフ名の競合が発生した場合、無視されます)優先度3番目
2。次に、関数の実行段階です。現在の関数で使用されるすべての変数と関数宣言は、現在の関数の[[scope]]スコープチェーンから検索されます。スコープチェーン内のオブジェクトの位置によれば、現在の関数のAOオブジェクトが最初に検索されます。上部オブジェクトがない場合、グローバルオブジェクトが見つかります。 NOがある場合、エラーが報告されます(変数は定義されていません)。
上記のJavaScript機能実行プロセスは、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。