閉包の理解(間違いがあるかもしれませんが、大神は問題があれば訂正してください)

2112 ワード

閉包の理解には主に2つの役割がある.
1.外部メソッドは内部メソッドの変数を適用する.データのキャッシュ
function a() {
var i = 0;

function b() {
alert(++i);
}
return b;
}
var c = a();
c();//1
c();//2

その中のcはwindowグローバルメソッドで、それはメソッドaの中のbメソッドを呼び出すことができて、aが内部関数bを返したことに注意して、もしそうでなければ、cはbを呼び出すことができません;
aには変数iがあります.なぜ最初にcを呼び出すのは1、2回目は2です.cはグローバルオブジェクトであるため、メモリに保存されています.
 
次のコードを見てください.
  var name = "The Window";   
  var object = {   
    name : "My Object",   
    getNameFunc : function(){   
      return function(){   
        return this.name;   
     };   
    }   
};   
alert(object.getNameFunc()());  //The Window

なぜ?
objectに注意して、それはグローバルオブジェクトで、thisはwindowを代表して、だからthis.nameはグローバル変数nameを表し、objectのnameを呼び出す場合はthis.object.nameはこのように呼び出せばよい
个人的な闭包に対する见方(大神に対してきっと何でもない):
1.オブジェクトがキャッシュされ、パフォーマンスが低下したりメモリが漏洩したりする可能性があります.
2.現在のコンテキストが錯乱します.