快速理解javascript中的閉包

深入javascript中的閉包.png

首先要理解作用域

  1. 在JavaScript中,作用域通常是指代碼的上下文(context)尽爆。能夠定義全局或者局部作用域谣旁。
  2. 函數(shù)作用域:JavaScript 中函數(shù)域?yàn)樽钚∮蚍秶芈or與while循環(huán)或者if和switch都不能構(gòu)建作用域惠呼。規(guī)則就是导俘,新函數(shù)新域。
  3. 詞匯作用域:當(dāng)遇到一個(gè)函數(shù)嵌套到另一函數(shù)中剔蹋,內(nèi)部函數(shù)能夠訪問外部函數(shù)的作用域旅薄,那么這種方式叫做詞匯作用域(Lexical Socpe)或者閉包,也稱為成為靜態(tài)作用域泣崩。
  4. 任何父作用域中定義的變量少梁、對(duì)象和函數(shù)在其域作用鏈中都可以使用
  5. 作用域鏈:函數(shù)的作用域由作用域鏈構(gòu)成。我們知道矫付,每個(gè)函數(shù)可以定義嵌套的作用域凯沪,任何內(nèi)嵌函數(shù)都有一個(gè)局部作用域連接外部函數(shù)。這種嵌套關(guān)系我們可以稱為鏈买优。域一般由代碼中的位置決定妨马。當(dāng)解釋(resolving)一個(gè)變量,通常從作用域鏈的最里層開始杀赢,向外搜索烘跺,直到發(fā)現(xiàn)要尋找的變量、對(duì)象或者函數(shù)脂崔。作用域鏈的用途是保證對(duì)執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問滤淳。作用域鏈包含了在環(huán)境棧中的每個(gè)執(zhí)行環(huán)境對(duì)應(yīng)的變量對(duì)象。通過作用域鏈砌左,可以決定變量的訪問和標(biāo)識(shí)符的解析脖咐。全局執(zhí)行環(huán)境的變量對(duì)象始終都是作用域鏈的最后一個(gè)對(duì)象。

閉包

特性

  • 函數(shù)嵌套函數(shù)
  • 函數(shù)內(nèi)部可以引用外部的參數(shù)和變量
  • 參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收

作用:創(chuàng)建私有變量模仿塊級(jí)作用域

  1. 閉包是指有權(quán)訪問另一函數(shù)作用域中的變量的函數(shù)汇歹。換句話說文搂,在函數(shù)內(nèi)定義一個(gè)嵌套的函數(shù)時(shí),就構(gòu)成了一個(gè)閉包秤朗,它允許嵌套函數(shù)訪問外層函數(shù)的變量煤蹭。通過返回嵌套函數(shù),允許你維護(hù)對(duì)外部函數(shù)中局部變量取视、參數(shù)硝皂、和內(nèi)函數(shù)聲明的訪問。這種封裝允許你在外部作用域中隱藏和保護(hù)執(zhí)行環(huán)境作谭,并且暴露公共接口稽物,進(jìn)而通過公共接口執(zhí)行進(jìn)一步的操作。

  2. 閉包和詞法域( Lexical Scope)很像折欠。返回函數(shù)引用贝或,這種實(shí)際應(yīng)用吼过,是一個(gè)可以用來解釋閉包工作原理的好例子。在我們的域內(nèi)部咪奖,我們可以返回對(duì)象盗忱,能夠被父域使用

  3. 閉包使得我們的內(nèi)部域無法被公共域訪問到。單獨(dú)調(diào)用函數(shù)并不作任何操作羊赵,因?yàn)槠鋯渭兊姆祷匾粋€(gè)函數(shù)趟佃。閉包并不一定需要返回函數(shù)。單純?cè)谥虚g詞匯域量的范圍外簡(jiǎn)單訪問變量就創(chuàng)造了一個(gè)閉包昧捷。

閉包的應(yīng)用

  1. 模塊化:模塊類似于一個(gè)單例對(duì)象闲昭。由于在上面的代碼中我們利用了(function() { ... })();的匿名函數(shù)形式,因此當(dāng)編譯器解析它的時(shí)候會(huì)立即執(zhí)行靡挥。在閉包的執(zhí)行上下文的外部唯一可以訪問的對(duì)象是位于返回對(duì)象中的公共方法和屬性序矩。然而,因?yàn)閳?zhí)行上下文被保存的緣故跋破,所有的私有屬性和方法將一直存在于應(yīng)用的整個(gè)生命周期簸淀,這意味著我們只有通過公共方法才可以與它們交互。

  2. 立即執(zhí)行的函數(shù)表達(dá)式(IIFE): 是一個(gè)在全局環(huán)境中自執(zhí)行的匿名函數(shù),護(hù)全局命名空間免受變量污染,它通過構(gòu)建函數(shù)作用域的形式將變量與全局命名空間隔離幔烛,并通過閉包的形式讓它們存在于整個(gè)運(yùn)行時(shí)(runtime)啃擦。在很多的應(yīng)用和框架中,這種封裝源代碼的方式用處非常的流行饿悬,通常都是通過暴露一個(gè)單一的全局接口的方式與外部進(jìn)行交互令蛉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狡恬,隨后出現(xiàn)的幾起案子珠叔,更是在濱河造成了極大的恐慌,老刑警劉巖弟劲,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祷安,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兔乞,警方通過查閱死者的電腦和手機(jī)汇鞭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庸追,“玉大人霍骄,你說我怎么就攤上這事〉荩” “怎么了读整?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)咱娶。 經(jīng)常有香客問我米间,道長(zhǎng)强品,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任屈糊,我火速辦了婚禮的榛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘另玖。我一直安慰自己困曙,他們只是感情好表伦,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布谦去。 她就那樣靜靜地躺著,像睡著了一般蹦哼。 火紅的嫁衣襯著肌膚如雪鳄哭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天纲熏,我揣著相機(jī)與錄音妆丘,去河邊找鬼。 笑死局劲,一個(gè)胖子當(dāng)著我的面吹牛勺拣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鱼填,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼药有,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了苹丸?” 一聲冷哼從身側(cè)響起愤惰,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赘理,沒想到半個(gè)月后宦言,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡商模,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年奠旺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片施流。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡响疚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫂沉,到底是詐尸還是另有隱情稽寒,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布趟章,位于F島的核電站杏糙,受9級(jí)特大地震影響慎王,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宏侍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一赖淤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谅河,春花似錦咱旱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至褂始,卻和暖如春诸典,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崎苗。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工狐粱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胆数。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓肌蜻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親必尼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒋搜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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