2019-03-25 js閉包和內(nèi)存釋放

閉包的那些事兒

  • 怎么寫一個(gè)閉包
    閉包是什么就不解釋了岸啡,直接寫一個(gè)閉包函數(shù):
  var f = function() {
    var num = 0;
    return function() {
      return num += 1;
    };
  }

js中暇藏,函數(shù)是一等公民,定義一個(gè)函數(shù)f滨砍,它返回另一個(gè)可執(zhí)行函數(shù)function() { return num += 1; };

js中的作用域蒲每,都是一層一層向上找的纷跛,在f內(nèi)部函數(shù)里面,他的num向上找到父函數(shù)的作用域邀杏。
現(xiàn)在贫奠,我們執(zhí)行一下:

f()()
// 1
f()()
// 1
????? 感覺 不太對(duì)?為什么num沒有自增呢望蜡?唤崭?
  • 內(nèi)存回收機(jī)制
    為什么上面執(zhí)行結(jié)果不太對(duì),因?yàn)閳?zhí)行f()()后脖律,f函數(shù)已經(jīng)執(zhí)行完畢了谢肾,沒有其他資源引用f,ta會(huì)被立即釋放小泉,也就是說芦疏,f()()執(zhí)行完后,立即就釋放了微姊。
    如何才不釋放呢酸茴?
// 創(chuàng)建f的引用
var fn = f();
fn()
// 1
fn()
// 2
fn()
// 3

這下就對(duì)了,num成了私有變量兢交,f擁有了私有作用域薪捍。

完了嗎?
f有了fn的引用,內(nèi)存一直得不到釋放酪穿,咋辦呢凳干?這樣的函數(shù)多了是不是會(huì)造成內(nèi)存溢出?
手動(dòng)釋放一下:

var fn = f();
fn()
// 1
fn()
// 2
fn()
// 3
// 手動(dòng)釋放f的引用
fn = null
// f的引用fn被釋放了被济,現(xiàn)在f的作用域也被釋放了救赐。num再次歸零了。
var fn = f()
fn()
// 1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溉潭,一起剝皮案震驚了整個(gè)濱河市净响,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喳瓣,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赞别,死亡現(xiàn)場(chǎng)離奇詭異畏陕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仿滔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門惠毁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崎页,你說我怎么就攤上這事鞠绰。” “怎么了飒焦?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵蜈膨,是天一觀的道長。 經(jīng)常有香客問我牺荠,道長翁巍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任休雌,我火速辦了婚禮灶壶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杈曲。我一直安慰自己驰凛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布担扑。 她就那樣靜靜地躺著恰响,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魁亦。 梳的紋絲不亂的頭發(fā)上渔隶,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼间唉。 笑死绞灼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呈野。 我是一名探鬼主播低矮,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼被冒!你這毒婦竟也來了军掂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤昨悼,失蹤者是張志新(化名)和其女友劉穎蝗锥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體率触,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡终议,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葱蝗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穴张。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖两曼,靈堂內(nèi)的尸體忽然破棺而出皂甘,到底是詐尸還是另有隱情,我是刑警寧澤悼凑,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布偿枕,位于F島的核電站,受9級(jí)特大地震影響佛析,放射性物質(zhì)發(fā)生泄漏益老。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一寸莫、第九天 我趴在偏房一處隱蔽的房頂上張望捺萌。 院中可真熱鬧,春花似錦膘茎、人聲如沸桃纯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽态坦。三九已至,卻和暖如春棒拂,著一層夾襖步出監(jiān)牢的瞬間伞梯,已是汗流浹背玫氢。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谜诫,地道東北人漾峡。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像喻旷,于是被迫代替她去往敵國和親生逸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355