javascript閉包應用–收集中…

來源:互聯網
上載者:User

閉包可以用優雅的方式來處理一些棘手的問題,有些程式員聲稱沒有閉包簡直就活不下去了。這雖然有些誇張,卻從側面說明閉包有著強大的功能。下面列舉了一些閉包應用。

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(){
            
        }
    }
})();

大家還有什麼新的應用,可以分享下,由於我被屏蔽首頁,只能發在新手區了,希望管理員能取消我的屏蔽

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.