<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    JavaScript閉包詳解

    1、何謂閉包

    JavaScript例子:

    function GISMapPanel() 
    this.mapPanel = document.getElementById("mapDiv"); 
    this.width; 
    this.height; 

    this.showMap = function() 
    alert(
    this.mapPanel); //tip:[object] 
    this.mapPanel.onmousedown = this.mouseDownEventProcess(); 
    }
     

    this.mouseDownEventProcess = function( )
    var _this = this
    return function() 
    alert(
    this.mapPanel); //tip:undefined,why; 
    _this.width = 400
    _this.height 
    = 300
    //other codes 
    }
     
    }
     
    }
     


    閉包簡單的解釋是,ECMAScript允許inner functions(嵌套函數):函數可以定義在另外一個函數里面。這些內部的函數可以訪問outer function(父函數)的local變量,參數,其它內部函數。當內部函數被構造,并可以在函數外被獲得(函數當成返回值),這個內部函數在 outer function返回后被執行(在outer函數外執行),那一個閉包形成了。

    閉包特征:A、作為一個函數變量的一個引用,當函數返回時,其處于激活狀態;B、一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。


    2、 閉包隱喻

    function就像房子內的居室(也是房子),可以租給給甲居住,甲就是居室(function)的主人(this),也可以租給乙住,乙就成為居室(function)的主人(this),甲原來的一切則被甲帶走,乙用不到任何甲的東西。如果甲是房子(外層function)的主人,并把某居室(內層function)租給乙,乙具有居室內的一切,而乙也可以使用甲的衛生間、客廳(外層函數變量,如_this)。閉包變量就是外層房子內變量,包括居室(function)、衛生間、客廳(外層函數變量)。同JavaScript閉包,居室可以是一局、兩局、多局,當然一局一般比較好租,JavaScript閉包一般也是一局。

    3、閉包作用

    面向對象編程的成功和流行,使不支持面向的對象編程的語言也盡量往這個方向靠,如C語言可以通過struct及function指針,模擬面向對象編程,以期達到面向對象的封裝、多態;JavaScript則通過基于對象編制以期達到封裝性。如上例所示,把地圖(div)相關的事件處理代碼、相關屬性、相關方法集中到GISMapPanel對象中。但由于事件發生的實體是地圖對應的div對象,事件函數調用時房子是由div對象居住的,也就是說this是div元素,因此,會出現alert(this.mapPanel); //tip:undefined,div元素沒有屬性mapPanel;如果想要訪問原GISMapPanel對象中的屬性,就要象例子所示,把GISMapPanel對象當作一個客廳來處理,從而可以使用客廳內的東西,而不是別人居室內的東西(也是訪問不到的,正如alert(this.mapPanel); //tip:undefined,該this就不是外層居室的this了,本來想直接訪問外層居室的this)。通過閉包、基于對象,取代了全局變量、函數方式的JavaScript處理事件、業務邏輯處理手段,增加了模塊性、封裝性、問題局部化等特性。

    posted on 2008-07-20 22:36 々上善若水々 閱讀(987) 評論(0)  編輯  收藏 所屬分類: JavaScript

    主站蜘蛛池模板: 99re免费99re在线视频手机版| 亚洲一区免费视频| 亚洲福利在线观看| 免费看污成人午夜网站| 在线观看亚洲专区| 久久精品九九亚洲精品天堂| 国产精品久久永久免费| 亚洲国产成人久久精品大牛影视| 国产亚洲日韩在线三区| 国产v精品成人免费视频400条| 美女视频黄a视频全免费网站色 | 91黑丝国产线观看免费| 暖暖免费中文在线日本| 伊人久久综在合线亚洲2019| 日本不卡在线观看免费v| 3344在线看片免费| 亚洲综合一区国产精品| 国产午夜亚洲精品午夜鲁丝片| 7723日本高清完整版免费| 一个人看的www在线免费视频 | 中国国语毛片免费观看视频| 亚洲偷自精品三十六区| 亚洲综合无码精品一区二区三区 | 久久A级毛片免费观看| 免费在线人人电影网| 亚洲另类春色国产精品| 亚洲五月综合缴情在线观看| 免费高清小黄站在线观看| 亚洲免费精彩视频在线观看| 免费一级做a爰片久久毛片潮| 亚洲a视频在线观看| 国产亚洲婷婷香蕉久久精品| 国产一精品一aⅴ一免费| 亚洲免费中文字幕| 免费一级毛片在线播放视频| 青青久久精品国产免费看 | 日韩精品内射视频免费观看| 九九久久国产精品免费热6| 亚洲精品又粗又大又爽A片| 亚洲欧洲精品一区二区三区| 国产AV无码专区亚洲AVJULIA|