ホームページ > 記事 > ウェブフロントエンド > JSにおけるクロージャの意味
クロージャは、別の関数のスコープ内の変数にアクセスできる関数です。
最も一般的なのは、関数の中に別の関数を作成することです。 TrialFunction() 関数を例に挙げます。
function TrialFunction(property) { return function(a, b) { var a1 = a[property]; var b1 = b[property]; if (a1 < b1) { return -1; } else if (a1 > b1) { return 1; } else { return 0; } }; }
上記のコードでは、内部関数は外部関数の変数プロパティにアクセスします。内部関数が返されて別の場所で呼び出された場合でも、他の関数は引き続きプロパティ変数にアクセスできます。
この状況は、この内部関数のスコープ チェーンに TrialFunction のスコープが含まれているためです。
関数が呼び出されると、実行環境 (実行コンテキスト) と対応するスコープ チェーンが作成されます。その後、関数のアクティビティ オブジェクトが、引数およびその他の名前付きパラメーターの値を使用して初期化されます。ただし、スコープ チェーンでは、外部関数のアクティブ オブジェクトが常に 2 番目にあり、外部関数のアクティブ オブジェクトが 3 番目にあり、最後にスコープ チェーンとしてグローバル実行環境まで続きます。
関数の実行中に、変数の値を読み書きするには、スコープ チェーン内で変数を見つける必要があります。
このスコープ チェーンのメカニズムは副作用を引き起こします。つまり、クロージャは、それを含む関数内の変数の最後の値しか取得できません。
例:
function example() { var result = new Array(); for (var i = 0; i < 10; i++) { result[i] = function() { return i; } } return result; }
この関数は配列を返します。一般に、各関数は独自のインデックス、つまり [0, 1, 2, ...9] を返す必要があると考えています。戻ります 10です。
以上がJSにおけるクロージャの意味の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。