閉包可以用優雅的方式來處理一些棘手的問題,有些程式員聲稱沒有閉包簡直就活不下去了。這雖然有些誇張,卻從側面說明閉包有著強大的功能。下面列舉了一些閉包應用。
1、通過閉包修正事件註冊時的this指標
Code
button1.onclick =
(function(owner){return function(){button1_click.apply(owner,arguments)}})(button1);
2、利用閉包加強模組化
閉包有益於模組化編程,它能以簡單的方式開發較小的模組,從而提高開發速度和程式的可複用性。和沒有使用閉包的程式相比,使用閉包可將模組劃分得更小。比 如我們要計算一個數組中所有數位和,這隻需要迴圈遍曆數組,把遍曆到的數字加起來就行了。如果現在要計算所有元素的積呢?要列印所有的元素呢?解決這些 問題都要對數組進行遍曆,如果是在不支援閉包的語言中,我們不得不一次又一次重複地寫迴圈語句。而這在支援閉包的語言中是不必要的.
javascript 閉包模組化
var sum=0;
function each(array,callback){
var i=0,length=array.length;
for(var v=array[0];i<length;i++){
v=array[i];
callback.call(v,i,v);
}
return array;
}
each(n,function(i,o){
sum=sum+o;
});
each(n,function(i,o)){
sum=sum*o;
}
3、抽象,閉包是資料和行為的組合,這使得閉包具有較好抽象能力,下面的代碼通過閉包來類比物件導向編程的單例模式。
MyNamespace.Singleton=(function(){
//private methods
var privateAttribute1=false;
var privateAttribute2=true;
function privateMethod(){
}
return {//public members
publicAttribute1:true,
publicAttribute2:10,
method1:function(){
},
method12:function(){
}
}
})();
大家還有什麼新的應用,可以分享下,由於我被屏蔽首頁,只能發在新手區了,希望管理員能取消我的屏蔽