js--閉包

  • 當(dāng)在函數(shù)內(nèi)部定義了其他函數(shù)時(shí),就創(chuàng)建了閉包侧但。

  • 在后臺(tái)執(zhí)行環(huán)境中介评,閉包的作用域鏈包含著它自己的作用域库北、外部函數(shù)的作用域和全局作用域。

  • 通常们陆,函數(shù)的作用域及其所有變量都會(huì)在函數(shù)執(zhí)行結(jié)束后被銷毀寒瓦。

  • 所以,創(chuàng)建并立即調(diào)用一個(gè)函數(shù)坪仇,既可以執(zhí)行其中的代碼孵构,又不會(huì)在內(nèi)存中留下對(duì)該函數(shù)的引用。

  • 但是烟很,當(dāng)函數(shù)返回一個(gè)閉包時(shí)颈墅,這個(gè)函數(shù)的作用域?qū)?huì)一直在內(nèi)存中保存到閉包不存在為止蜡镶。

  • 每個(gè)函數(shù)在被調(diào)用時(shí)都會(huì)自動(dòng)取得兩個(gè)特殊變量:this和arguments,內(nèi)部函數(shù)在搜索這兩個(gè)變量時(shí)恤筛,只會(huì)搜索到自己的活動(dòng)對(duì)象為止官还,因此永遠(yuǎn)不可能直接訪問(wèn)外部函數(shù)的這兩個(gè)變量,所以在閉包函數(shù)里的this毒坛,指向的是window對(duì)象望伦。

  • 例如:
    var name = "The Window";

     var object = {
         name : "My Object",
     
         getNameFunc : function(){
             return function(){
                 return this.name;
             };
         }
     };
     
     alert(object.getNameFunc()());  //"The Window"
    
  • 清理內(nèi)存:

  •      function assign(){
             var element = document.getElementById("xxx");
             var id = element.id;
             element.onclick = function(){
                 alert(id);
                 // alert(element.id);
             }
             element = null;
             }
    
  • 解析:DOM對(duì)象往往占據(jù)較大的內(nèi)存,當(dāng)在閉包函數(shù)內(nèi)直接訪問(wèn)element.id時(shí)煎殷,element具有兩個(gè)引用數(shù)屯伞,引用數(shù)大于0就無(wú)法被垃圾回收。

  • 改進(jìn):用id = element.id來(lái)取得需要的值豪直,而避免在閉包內(nèi)對(duì)element的整個(gè)引用劣摇,但此時(shí)element依然在外部函數(shù)的作用域中被引用,引用數(shù)為1依舊大于0弓乙,所以為了使element所指對(duì)象的引用數(shù)0末融,在使用完后要將element的引用指向null,這樣之前被element引用的對(duì)象就可以被垃圾回收了暇韧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末勾习,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子懈玻,更是在濱河造成了極大的恐慌巧婶,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涂乌,死亡現(xiàn)場(chǎng)離奇詭異艺栈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)骂倘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門眼滤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人历涝,你說(shuō)我怎么就攤上這事诅需。” “怎么了荧库?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵堰塌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我分衫,道長(zhǎng)场刑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任蚪战,我火速辦了婚禮牵现,結(jié)果婚禮上铐懊,老公的妹妹穿的比我還像新娘。我一直安慰自己瞎疼,他們只是感情好科乎,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著贼急,像睡著了一般茅茂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上太抓,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天空闲,我揣著相機(jī)與錄音,去河邊找鬼走敌。 笑死碴倾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悔常。 我是一名探鬼主播影斑,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼给赞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼机打!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起片迅,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤残邀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后柑蛇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芥挣,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年耻台,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了空免。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盆耽,死狀恐怖蹋砚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摄杂,我是刑警寧澤坝咐,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站析恢,受9級(jí)特大地震影響墨坚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜映挂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一泽篮、第九天 我趴在偏房一處隱蔽的房頂上張望盗尸。 院中可真熱鬧,春花似錦帽撑、人聲如沸振劳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)历恐。三九已至,卻和暖如春专筷,著一層夾襖步出監(jiān)牢的瞬間弱贼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工磷蛹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吮旅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓味咳,卻偏偏與公主長(zhǎng)得像庇勃,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子槽驶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 閉包(closure)是Javascript語(yǔ)言的一個(gè)難點(diǎn)责嚷,也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)掂铐。 一罕拂、變量...
    zock閱讀 1,075評(píng)論 2 6
  • 閉包: 官方”的解釋是:閉包是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該...
    小裁縫sun閱讀 619評(píng)論 0 5
  • 定義 定義一:有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中的變量的函數(shù)全陨。定義二:可以訪問(wèn)其被創(chuàng)建時(shí)所處的上下文環(huán)境的函數(shù)爆班。 創(chuàng)建閉包...
    大橙子CZ閱讀 319評(píng)論 0 0
  • 閉包function createComparison(propertyName){return function...
    Miss____Du閱讀 677評(píng)論 3 6
  • 呵呵……呵你麻痹…… 連續(xù)咨詢我三年旅游線路,卻一次也沒(méi)有報(bào)過(guò)名的客戶跑來(lái)問(wèn)我辱姨,最近有沒(méi)有西藏的線路柿菩。 這段時(shí)間,...
    米粥的江湖閱讀 350評(píng)論 3 6