クロージャ は JavaScript における独特の概念であり、特に ECMA 仕様で与えられている定義は、実践的な経験がなければ、その定義を理解することから始めるのは困難です。 。したがって、この記事ではクロージャの概念について長々と説明するのではなく、数分でクロージャを学習できるように実践的な情報に直接進みます。
1 結論 – 愛の最初の経験 新しいテクノロジーに接したとき、私が最初にすることは、そのデモ コードを見つけることです。コード作成者にとって、コードは自然言語よりも物事を理解できることがあります。 実際、クロージャはどこにでもあります。たとえば、jQuery と zepto の主要なコードはすべて大きなクロージャに含まれています。そこで、脳内でクロージャを生成するのに役立つ、最も単純で最も原始的なクロージャのデモを書きます。function A(){ function B(){ console.log("Hello Closure!"); } return B; } var c = A(); c();//Hello Closure!
The関数 A の内部関数 B は、関数 A の外部の変数 c によって参照されています このナンセンスを再処理すると、クロージャの定義になります: 内部関数がその外部関数の外部の変数によって参照されるとき、クロージャが形成されます。 この定義を覚えようとしないでください。この定義を説明する目的は、上記の 5 つのステップがクロージャの定義を詳しく説明するためのものであることを理解していただくことです。 つまり、上記の 5 つのステップを実行すると、すでにクロージャが定義されています。 これで閉店です。 2 クロージャの役割クロージャの役割を理解する前に、まず JavaScript の GC メカニズムを理解しましょう。JavaScript では、オブジェクトが参照されなくなった場合、そのオブジェクトは GC によってリサイクルされます。そうでない場合、オブジェクトは GC によってリサイクルされます。常にメモリに保存されます。 上記の例では、BはAに定義されているため、BはAに依存し、外部変数cはBを参照しているため、Aはcによって間接的に参照されます。つまり、AはGCによってリサイクルされず、永遠に記憶に保存されます。私たちの推論を証明するために、上記の例を少し改良します。
function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var c = A(); c();// 1 c();// 2 c();// 3
(function(document){ var viewport; var obj = { init:function(id){ viewport = document.querySelector("#"+id); }, addChild:function(child){ viewport.appendChild(child); }, removeChild:function(child){ viewport.removeChild(child); } } window.jView = obj; })(document);
var f = function(document){ var viewport; var obj = { init:function(id){ viewport = document.querySelector("#"+id); }, addChild:function(child){ viewport.appendChild(child); }, removeChild:function(child){ viewport.removeChild(child); } } window.jView = obj; }; f(document);
window.jView = obj;
これはクロージャの最も単純な理解です。もちろん、クロージャにはさらに深い理解があり、JS の実行コンテキストとアクティブ オブジェクト (呼び出しオブジェクト)、およびスコープの操作メカニズムを理解する必要があります。そしてスコープチェーン。しかし、初心者としては、今はこれらを理解する必要はありません。簡単に理解した後、実際のプロジェクトで使用することで、自然とクロージャの理解が深まります。
以上がわかりやすいJavaScriptクロージャーのサンプルコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。