閉包の理解(間違いがあるかもしれませんが、大神は問題があれば訂正してください)
2112 ワード
閉包の理解には主に2つの役割がある.
1.外部メソッドは内部メソッドの変数を適用する.データのキャッシュ
その中のcはwindowグローバルメソッドで、それはメソッドaの中のbメソッドを呼び出すことができて、aが内部関数bを返したことに注意して、もしそうでなければ、cはbを呼び出すことができません;
aには変数iがあります.なぜ最初にcを呼び出すのは1、2回目は2です.cはグローバルオブジェクトであるため、メモリに保存されています.
次のコードを見てください.
なぜ?
objectに注意して、それはグローバルオブジェクトで、thisはwindowを代表して、だからthis.nameはグローバル変数nameを表し、objectのnameを呼び出す場合はthis.object.nameはこのように呼び出せばよい
个人的な闭包に対する见方(大神に対してきっと何でもない):
1.オブジェクトがキャッシュされ、パフォーマンスが低下したりメモリが漏洩したりする可能性があります.
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.現在のコンテキストが錯乱します.