この記事では、主に JS のクロージャーについて詳しく説明します。お役に立てれば幸いです。
var n = 999; function f1() { console.log(n); } f1() // 999
JavaScriptにはグローバルスコープと関数スコープの2種類のスコープがあります。グローバル変数は関数内で直接読み取ることができます。関数 f1 はグローバル変数 n を読み取ることができます。ただし、関数内で宣言された変数を関数の外で読み取ることはできません。
function f1() { var n = 99; } console.log(n);
ただし、関数の外部から関数内の変数にアクセスする必要がある場合があります。通常の状況では、これは不可能であり、回避策によってのみ実現できます。つまり、関数内に別の関数を定義します。
function f1() { var n = 999; var f2 = function() { console.log(n); } return f2; } var f = f1(); f();
上記のコードでは、関数 f2 が関数 f1 の中にあります。このとき、f1 内のすべてのローカル変数が f2 から見えます。ただし、その逆は機能しません。f2 内のローカル変数は f1 には見えません。これは、JavaScript 言語の独自の「チェーン スコープ」構造で、子オブジェクトはすべての親オブジェクトの変数をレベルごとに検索します。したがって、親オブジェクトのすべての変数は子オブジェクトから見えますが、その逆はありません。
f2 は f1 のローカル変数を読み取ることができるため、 f2 が戻り値として使用される限り、 f1 の外部でその内部変数を読み取ることができます。クロージャは関数 f2 で、他の関数の内部変数を読み取ることができる関数です。 JavaScript 言語では、関数内のサブ関数のみが内部変数を読み取ることができるため、クロージャは単純に「関数内で定義された関数」として理解できます。クロージャの最大の特徴は、自分が生まれた環境を「記憶」できることです。たとえば、f2 は自分が生まれた環境 f1 を記憶しているため、f2 から f1 の内部変数を取得できます。本質的に、クロージャは関数の内部と関数の外部を接続するブリッジです。つまり、クロージャの最大の用途は 2 つあり、1 つは関数内の変数を読み取ること、もう 1 つはこれらの変数をメモリ内に保持することです。つまり、クロージャは、クロージャが生成された環境を常に存在させることができます。
関連する推奨事項:
js_javascript スキルのクロージャーについての簡単な説明
以上がJSのクロージャの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。