クロージャとループのスコープ
ループ内での JavaScript クロージャの使用を理解することは、モジュール式で再利用可能なコードを作成するために不可欠です。クロージャを使用すると、関数は、囲んでいる関数が戻った後でも、囲んでいるスコープから変数にアクセスして操作できます。
問題
次のコード スニペットを考えてみましょう。
<code class="javascript">function addLinks() { for (var i = 0, link; i < 5; i++) { link = document.createElement("a"); link.innerHTML = "Link " + i; link.onclick = function(num) { return function() { alert(num); }; }(i); document.body.appendChild(link); } }</code>
重要な重要な行は、onclick イベント ハンドラーの定義です。クロージャ内で匿名関数を使用して、ループ内で作成されたリンクのインデックスを表す i 変数を参照します。
解決策: 関数ファクトリ
このシナリオでのクロージャの使用を明確にするには、ファンクション ファクトリ アプローチを採用できます。コードの簡略化したバージョンを次に示します。
<code class="javascript">function generateHandler(i) { return function() { alert(i); }; } for (var i = 0; i < 5; i++) { document.getElementById(i).onclick = generateHandler(i); }</code>
この例では、指定された i 値を参照する関数を返す関数ファクトリ、generateHandler() を作成します。ファクトリを使用して各 onclick ハンドラーを生成することにより、各関数が i 変数の独自のプライベート コピーを持つようになります。
クロージャについて
クロージャはコンテキストをキャプチャします。周囲のスコープの変数やパラメーターを含む、それらが定義されている内容。内部関数がクロージャ内で呼び出されると、外側の関数が戻った後でも、キャプチャされた変数にアクセスできます。
重要なポイント
以上がクロージャは JavaScript ループの変数スコープの管理にどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。