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

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

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

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    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 
    }
     
    }
     
    }
     


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

    閉包特征:A、作為一個(gè)函數(shù)變量的一個(gè)引用,當(dāng)函數(shù)返回時(shí),其處于激活狀態(tài);B、一個(gè)閉包就是當(dāng)一個(gè)函數(shù)返回時(shí),一個(gè)沒有釋放資源的棧區(qū)。


    2、 閉包隱喻

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

    3、閉包作用

    面向?qū)ο缶幊痰某晒土餍校共恢С置嫦虻膶?duì)象編程的語言也盡量往這個(gè)方向靠,如C語言可以通過struct及function指針,模擬面向?qū)ο缶幊蹋云谶_(dá)到面向?qū)ο蟮姆庋b、多態(tài);JavaScript則通過基于對(duì)象編制以期達(dá)到封裝性。如上例所示,把地圖(div)相關(guān)的事件處理代碼、相關(guān)屬性、相關(guān)方法集中到GISMapPanel對(duì)象中。但由于事件發(fā)生的實(shí)體是地圖對(duì)應(yīng)的div對(duì)象,事件函數(shù)調(diào)用時(shí)房子是由div對(duì)象居住的,也就是說this是div元素,因此,會(huì)出現(xiàn)alert(this.mapPanel); //tip:undefined,div元素沒有屬性mapPanel;如果想要訪問原GISMapPanel對(duì)象中的屬性,就要象例子所示,把GISMapPanel對(duì)象當(dāng)作一個(gè)客廳來處理,從而可以使用客廳內(nèi)的東西,而不是別人居室內(nèi)的東西(也是訪問不到的,正如alert(this.mapPanel); //tip:undefined,該this就不是外層居室的this了,本來想直接訪問外層居室的this)。通過閉包、基于對(duì)象,取代了全局變量、函數(shù)方式的JavaScript處理事件、業(yè)務(wù)邏輯處理手段,增加了模塊性、封裝性、問題局部化等特性。

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

    主站蜘蛛池模板: 国产精品亚洲自在线播放页码 | 亚洲伊人久久大香线蕉影院| 美女视频黄的全免费视频网站| 亚洲午夜无码久久| 亚洲毛片网址在线观看中文字幕| 女同免费毛片在线播放| 亚洲人成777在线播放| 亚洲AⅤ永久无码精品AA| 无码av免费网站| 精品久久久久久久久亚洲偷窥女厕| 狠狠综合久久综合88亚洲| 99免费在线观看视频| 国产产在线精品亚洲AAVV| 久久久久亚洲av无码专区蜜芽| 成人男女网18免费视频| 99久久99这里只有免费的精品| 456亚洲人成影院在线观| 在线精品亚洲一区二区小说| 人妻视频一区二区三区免费| 无遮挡国产高潮视频免费观看| 亚洲福利电影一区二区?| 国产精品亚洲mnbav网站 | 91精品全国免费观看含羞草| 日日躁狠狠躁狠狠爱免费视频| 亚洲精品福利网站| 夜夜春亚洲嫩草影院| 免费观看美女裸体网站| 国产精品嫩草影院免费| 免费黄色电影在线观看| 真正全免费视频a毛片| 亚洲精品视频在线观看免费| 亚洲国产天堂久久综合| 免费无码黄十八禁网站在线观看| 成在人线av无码免费高潮水| 久久久久亚洲AV无码去区首| 亚洲国产精品白丝在线观看| 亚洲A∨无码一区二区三区| 亚洲色婷婷综合开心网| 国产免费av片在线播放| 毛片免费vip会员在线看| 最近2022中文字幕免费视频|