JavaScriptの高度なプログラミング(第3版)でクロージャが記載されている:閉鎖は別の関数の機能は、スコープの変数にアクセスすることがあります。
だから、クロージャの役割は明らかであろう。
1.外部関数の関数内のローカル変数にアクセスすることができます。
2.機能の終了が自動的に破棄されるように、これらの変数は、常にメモリに保存されている、とされていませんしましょう。
クロージャ表現形態は、例えばここで、
関数foo(){ VARのA = 10。 関数bar(){ * = 2; 返します。 } 戻りバー。 } VARバズ= FOO()。//バズは現在、機能バーへの参照です。 console.log(バズ())。//戻り20 はconsole.log(バズ())。//戻り40 はconsole.log(バズ())。//戻り80 VAR BLAT = FOO()。// BLATはバーに別の参照です。 console.log(BLAT())。//戻り20の新しいコピーが使用されているため。
たとえば、バズとバルトのコピーはそれぞれが独自のスコープと持って、そして唯一の彼らはそれを修正することができます。
いわゆる「閉鎖」は、インビボ方法でターゲットオブジェクトのコンストラクタ関数の関数として定義され、このオブジェクトのメソッドは、順番に一時変数外側の関数本体を指します。
これは、間接的に、元のコンストラクタ本体の値に使用された一時的な変数を維持することができ、その方法を維持するために、常に可能な対象物の長寿命になります。
非常に始まるにもかかわらず、コンストラクタ呼び出しは、一時変数の名前が値にアクセスすることもなくなっているが、ターゲットオブジェクトのメソッドでは、常に変数の値を参照することができた、とだけこの方法により、完成されています。
コンストラクタは、再び同じことを呼び出すが、唯一の新しいオブジェクトとメソッド、新しい値に対応するだけで、新たな一時変数を生成し、その最後の呼び出しとは独立している場合でも、
第三に、閉鎖注意事項
1)閉鎖に起因するそれ以外の場合は、メモリリークにつながる可能性がIEでのパフォーマンスの問題のWebページが発生します、それは虐待閉鎖することはできませんが、メモリの消費量が大きい場合には、変数の関数がメモリに格納されているようになります。
ソリューションは、すべてのローカル変数が使用されていない削除する関数を終了する前に、あります。