閉包

使變量的值始終保持在內(nèi)存中

function f1(){
  var n=999;
  function f2(){
    alert(n++);
  }
  return f2;
}
var result=f1();
result(); // 999
result(); // 1000

我們?cè)谕獠空{(diào)用result函數(shù)暇检,可以不斷增加內(nèi)部的n值,實(shí)際上函數(shù)f1中的局部變量n一直保存在內(nèi)存中,并沒有在f1調(diào)用后被自動(dòng)清除酿矢。

原因: f1是f2的父函數(shù),而f2被賦給了一個(gè)全局變量蜜暑,這導(dǎo)致f2始終在內(nèi)存中策肝,而f2的存在依賴于f1之众,因此f1也始終在內(nèi)存中,不會(huì)在調(diào)用結(jié)束后棺禾,被垃圾回收機(jī)制(garbage collection)回收。

用閉包模擬私有方法

var Counter = (function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  }   
})();
alert(Counter.value()); /* 提示 0 */
Counter.increment();
Counter.increment();
alert(Counter.value()); /* 提示 2 */
Counter.decrement();
alert(Counter.value()); /* 提示 1 */

JavaScript 并不提供原生的支持缺前,但是可以使用閉包模擬私有方法

使用閉包的注意點(diǎn)

  • 由于閉包會(huì)使得函數(shù)中的變量都被保存在內(nèi)存中蛀醉,內(nèi)存消耗很大,所以不能濫用閉包衅码,否則會(huì)造成網(wǎng)頁的性能問題拯刁,在IE中可能導(dǎo)致內(nèi)存泄露。解決方法是逝段,在退出函數(shù)之前垛玻,將不使用的局部變量全部刪除。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惹恃,一起剝皮案震驚了整個(gè)濱河市夭谤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巫糙,老刑警劉巖朗儒,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件参淹,死亡現(xiàn)場離奇詭異醉锄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)浙值,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門恳不,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人开呐,你說我怎么就攤上這事烟勋。” “怎么了筐付?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵卵惦,是天一觀的道長。 經(jīng)常有香客問我瓦戚,道長沮尿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任较解,我火速辦了婚禮畜疾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘印衔。我一直安慰自己啡捶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布奸焙。 她就那樣靜靜地躺著届慈,像睡著了一般徒溪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上金顿,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天臊泌,我揣著相機(jī)與錄音,去河邊找鬼揍拆。 笑死渠概,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嫂拴。 我是一名探鬼主播播揪,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼筒狠!你這毒婦竟也來了猪狈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤辩恼,失蹤者是張志新(化名)和其女友劉穎雇庙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灶伊,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疆前,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聘萨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竹椒。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖米辐,靈堂內(nèi)的尸體忽然破棺而出胸完,到底是詐尸還是另有隱情,我是刑警寧澤翘贮,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布赊窥,位于F島的核電站,受9級(jí)特大地震影響择膝,放射性物質(zhì)發(fā)生泄漏誓琼。R本人自食惡果不足惜检激,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一肴捉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叔收,春花似錦齿穗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春脖卖,著一層夾襖步出監(jiān)牢的瞬間乒省,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國打工畦木, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袖扛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓十籍,卻偏偏與公主長得像蛆封,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勾栗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

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

  • 閉包(closure)是Javascript語言的一個(gè)難點(diǎn)惨篱,也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)围俘。 一砸讳、變量...
    zock閱讀 1,075評(píng)論 2 6
  • ● 閉包基礎(chǔ) ● 閉包作用 ● 閉包經(jīng)典例子 ● 閉包應(yīng)用 ● 閉包缺點(diǎn) ● 參考資料 1、閉包基礎(chǔ) 作用域和作...
    lzyuan閱讀 941評(píng)論 0 0
  • 閉包(closure)是Javascript語言的一個(gè)難點(diǎn)楷拳,也是它的特色绣夺,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一欢揖、變量...
    zouCode閱讀 1,275評(píng)論 0 13
  • 陽光微暖陶耍, 時(shí)光正好, 冬日播下的種子她混, 今日已盎然生機(jī)烈钞, 親手摘下的不止眼前這一抹碧綠, 更是經(jīng)歷過風(fēng)霜雨雪的萬...
    好久不見890612閱讀 169評(píng)論 0 1
  • 來到武漢半年了,不知道還會(huì)待多久臭脓。許是一年酗钞,或是半載,也可能過完年就不來了来累,甚至元旦就走砚作。 來之前雄心勃勃...
    渦河一聲笑閱讀 405評(píng)論 0 0