js閉包學(xué)習(xí)

閉包指的是:能夠訪問另一個(gè)函數(shù)作用域的變量的函數(shù)

js作用域環(huán)境中訪問變量的權(quán)利是由內(nèi)向外的,內(nèi)部作用域可以獲得當(dāng)前作用域下的變量并且可以獲得當(dāng)前包含當(dāng)前作用域的外層作用域下的變量哲鸳,反之則不能测蘑,也就是說在外層作用域下無法獲取內(nèi)層作用域下的變量揭璃,同樣在不同的函數(shù)作用域中也是不能相互訪問彼此變量的醋奠,那么我們想在一個(gè)函數(shù)內(nèi)部也有限權(quán)訪問另一個(gè)函數(shù)內(nèi)部的變量該怎么辦呢?閉包就是用來解決這一需求的咐旧,閉包的本質(zhì)就是在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)蝶涩。

內(nèi)部函數(shù)總是可以訪問其外部函數(shù)中聲明的變量理朋,當(dāng)通過調(diào)用一個(gè)外部函數(shù)返回一個(gè)內(nèi)部函數(shù)后,即使該外部函數(shù)已經(jīng)執(zhí)行結(jié)束了绿聘,但是內(nèi)部函數(shù)引用外部函數(shù)的變量依然保存在內(nèi)存中嗽上,我們就把這些變量的集合稱為閉包

我們首先知道閉包有3個(gè)特性:

①函數(shù)嵌套函數(shù)

②函數(shù)內(nèi)部可以引用函數(shù)外部的參數(shù)和變量

③參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收

寫一個(gè)for循環(huán),讓它按順序打印出當(dāng)前循環(huán)次數(shù)

按照預(yù)期它應(yīng)該依次輸出1 2 3 4 5熄攘,而結(jié)果它輸出了五次5兽愤,這是為什么呢?原來由于js是單線程的挪圾,所以在執(zhí)行for循環(huán)的時(shí)候定時(shí)器setTimeout被安排到任務(wù)隊(duì)列中排隊(duì)等待執(zhí)行浅萧,而在等待過程中for循環(huán)就已經(jīng)在執(zhí)行,等到setTimeout可以執(zhí)行的時(shí)候哲思,for循環(huán)已經(jīng)結(jié)束洼畅,i的值也已經(jīng)編程5,所以打印出來五個(gè)5棚赔,那么我們?yōu)榱藢?shí)現(xiàn)預(yù)期結(jié)果應(yīng)該怎么改這段代碼呢帝簇?
閉包寫法(ps:如果把for循環(huán)里面的var變成let,也能實(shí)現(xiàn)預(yù)期結(jié)果)


閉包的好處

①保護(hù)函數(shù)內(nèi)的變量安全 靠益,實(shí)現(xiàn)封裝丧肴,防止變量流入其他環(huán)境發(fā)生命名沖突

②在內(nèi)存中維持一個(gè)變量,可以做緩存(但使用多了同時(shí)也是一項(xiàng)缺點(diǎn)捆毫,消耗內(nèi)存)

③匿名自執(zhí)行函數(shù)可以減少內(nèi)存消耗

壞處

①其中一點(diǎn)上面已經(jīng)有體現(xiàn)了闪湾,就是被引用的私有變量不能被銷毀冲甘,增大了內(nèi)存消耗绩卤,造成內(nèi)存泄漏途样,解決方法是可以在使用完變量后手動(dòng)為它賦值為null;

②其次由于閉包涉及跨域訪問濒憋,所以會(huì)導(dǎo)致性能損失何暇,我們可以通過把跨作用域變量存儲(chǔ)在局部變量中,然后直接訪問局部變量凛驮,來減輕對(duì)執(zhí)行速度的影響

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裆站,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子黔夭,更是在濱河造成了極大的恐慌宏胯,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件本姥,死亡現(xiàn)場離奇詭異肩袍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)婚惫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門氛赐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人先舷,你說我怎么就攤上這事艰管。” “怎么了蒋川?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵牲芋,是天一觀的道長。 經(jīng)常有香客問我捺球,道長街图,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任懒构,我火速辦了婚禮餐济,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胆剧。我一直安慰自己絮姆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布秩霍。 她就那樣靜靜地躺著篙悯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铃绒。 梳的紋絲不亂的頭發(fā)上鸽照,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音颠悬,去河邊找鬼矮燎。 笑死定血,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诞外。 我是一名探鬼主播澜沟,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼峡谊!你這毒婦竟也來了茫虽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤既们,失蹤者是張志新(化名)和其女友劉穎濒析,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啥纸,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悼枢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脾拆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馒索。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖名船,靈堂內(nèi)的尸體忽然破棺而出绰上,到底是詐尸還是另有隱情,我是刑警寧澤渠驼,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布蜈块,位于F島的核電站,受9級(jí)特大地震影響迷扇,放射性物質(zhì)發(fā)生泄漏百揭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一蜓席、第九天 我趴在偏房一處隱蔽的房頂上張望器一。 院中可真熱鬧,春花似錦厨内、人聲如沸祈秕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽请毛。三九已至,卻和暖如春瞭亮,著一層夾襖步出監(jiān)牢的瞬間方仿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仙蚜,地道東北人此洲。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像鳍征,于是被迫代替她去往敵國和親黍翎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子面徽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349