深入浅出Javascript:対象に向けたクローズド
1299 ワード
閉包を理解する
概念
クローズドとは、別の関数のスコープにアクセスする権限を持つ変数の関数です.
関数式のクローズド(内部にデータを保存し、外部に副作用がない)
作成方法
関数の内部に別の関数を作成します.
原理
一般関数:outer()で実行し終わったら、局部変数localが破壊され、メモリはグローバルスコープだけ保存されます.傍受事件 ajaxイベント
ループ
クローズドパッケージ関数を使用すると、プライベート変数の使用が容易になります.
包みの善し悪し利点:フレキシブルで便利なパッケージ デメリット:空間浪費、メモリ漏れ(循環参照)、性能消耗
概念
クローズドとは、別の関数のスコープにアクセスする権限を持つ変数の関数です.
関数式のクローズド(内部にデータを保存し、外部に副作用がない)
作成方法
関数の内部に別の関数を作成します.
原理
一般関数:outer()で実行し終わったら、局部変数localが破壊され、メモリはグローバルスコープだけ保存されます.
function outer() {
var localVal = 30;
return localVal;
}
outer(); // 30
クローズド:outer実行後、func()は依然としてouter()内部のlocalValにアクセスできます.func()はouter()の内の活動対象(localVal)をFnc()の作用領域チェーンに追加するためです.outer()が実行した後、localValはfunc()の作用するドメインチェーンによって引用されたので、local Valは破壊されないで、メモリの中に存在して、func()が破壊されるまで、廃棄されます.function outer() {
var localVal = 30;
return function() {
return localVal;
}
}
var func = outer();
func(); // 30
クローズドの応用!function() {
var localData = "localData here";
document.addEventListener('click',
function() {
console.log(localData);
}
);
}();
!function() {
var localData = "localData here";
var url = "http://www.baidu.com/";
$.ajax({
url: url;
success: function() {
console.log(localData);
}
});
}();
誤った使用ループ
クローズドパッケージ関数を使用すると、プライベート変数の使用が容易になります.
包みの善し悪し