js 作用域 閉包 原型

變量的作用域無非就是兩種:全局變量和局部變量役听。

Javascript語言的特殊之處偿警,就在于函數(shù)內(nèi)部可以直接讀取全局變量负间。

另一方面,在函數(shù)外部自然無法讀取函數(shù)內(nèi)的局部變量颖杏。

函數(shù)內(nèi)部聲明變量的時候纯陨,一定要使用var命令。如果不用的話留储,你實際上聲明了一個全局變量翼抠!

如何從外部讀取局部變量?那就是在函數(shù)的內(nèi)部获讳,再定義一個函數(shù)阴颖。

閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。

由于在Javascript語言中丐膝,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量量愧,因此可以把閉包簡單理解成"定義在一個函數(shù)內(nèi)部的函數(shù)"。

所以帅矗,在本質(zhì)上偎肃,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁。


它的最大用處有兩個浑此,一個是前面提到的可以讀取函數(shù)內(nèi)部的變量累颂,另一個就是讓這些變量的值始終保持在內(nèi)存中。

原因就在于f1是f2的父函數(shù)凛俱,而f2被賦給了一個全局變量紊馏,這導(dǎo)致f2始終在內(nèi)存中,而f2的存在依賴于f1最冰,因此f1也始終在內(nèi)存中瘦棋,不會在調(diào)用結(jié)束后,被垃圾回收機制(garbage collection)回收暖哨。

使用閉包的注意點

1)由于閉包會使得函數(shù)中的變量都被保存在內(nèi)存中赌朋,內(nèi)存消耗很大凰狞,所以不能濫用閉包,否則會造成網(wǎng)頁的性能問題沛慢,在IE中可能導(dǎo)致內(nèi)存泄露赡若。解決方法是,在退出函數(shù)之前团甲,將不使用的局部變量全部刪除逾冬。

2)閉包會在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值躺苦。所以身腻,如果你把父函數(shù)當作對象(object)使用,把閉包當作它的公用方法(Public Method)匹厘,把內(nèi)部變量當作它的私有屬性(private value)嘀趟,這時一定要小心,不要隨便改變父函數(shù)內(nèi)部變量的值愈诚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末她按,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炕柔,更是在濱河造成了極大的恐慌酌泰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匕累,死亡現(xiàn)場離奇詭異陵刹,居然都是意外死亡,警方通過查閱死者的電腦和手機哩罪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門授霸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人际插,你說我怎么就攤上這事碘耳。” “怎么了框弛?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵辛辨,是天一觀的道長。 經(jīng)常有香客問我瑟枫,道長斗搞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任慷妙,我火速辦了婚禮僻焚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膝擂。我一直安慰自己虑啤,他們只是感情好隙弛,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狞山,像睡著了一般全闷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萍启,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天总珠,我揣著相機與錄音,去河邊找鬼勘纯。 笑死局服,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的屡律。 我是一名探鬼主播腌逢,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼超埋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起佳鳖,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤霍殴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后系吩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體来庭,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年穿挨,在試婚紗的時候發(fā)現(xiàn)自己被綠了月弛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡科盛,死狀恐怖帽衙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贞绵,我是刑警寧澤厉萝,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站榨崩,受9級特大地震影響谴垫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜母蛛,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一翩剪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彩郊,春花似錦前弯、人聲如沸蚪缀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椿胯。三九已至,卻和暖如春剃根,著一層夾襖步出監(jiān)牢的瞬間哩盲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工狈醉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留廉油,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓苗傅,卻偏偏與公主長得像抒线,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子渣慕,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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

  • 閉包(closure)是Javascript語言的一個難點嘶炭,也是它的特色,很多高級應(yīng)用都要依靠閉包實現(xiàn)逊桦。 一眨猎、變量...
    zock閱讀 1,075評論 2 6
  • ● 閉包基礎(chǔ) ● 閉包作用 ● 閉包經(jīng)典例子 ● 閉包應(yīng)用 ● 閉包缺點 ● 參考資料 1、閉包基礎(chǔ) 作用域和作...
    lzyuan閱讀 926評論 0 0
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)强经,也就是一...
    悟名先生閱讀 4,131評論 0 13
  • 一、執(zhí)行環(huán)境 所有變量(包括基本類型和引用類型)都存在一個執(zhí)行環(huán)境(作用域)當中炬称,這個執(zhí)行環(huán)境決定了變量的生命周期...
    張延偉閱讀 447評論 1 1
  • 人生易老转砖,歲月易逝须鼎,很多事情,不去嘗試府蔗,怎么知道沒有意義晋控?做了,才知道有沒有意義姓赤。 寫作于我就是這樣赡译,其實心里...
    麥芒503閱讀 404評論 3 2