閉包

  • 閉包很神奇
    隨著硬件性能的提升以及編譯技術(shù)和虛擬機(jī)技術(shù)的改進(jìn),一些曾被性能問題所限制的動(dòng)態(tài)語言開始受到關(guān)注家肯,Python爵川、Ruby 和 Lua 等語言都開始在應(yīng)用中嶄露頭角。動(dòng)態(tài)語言因其方便快捷的開發(fā)方式成為很多人喜愛的編程語言息楔,伴隨動(dòng)態(tài)語言的流行寝贡,我們經(jīng)常聽到一個(gè)名詞——閉包,很多人會(huì)問閉包是什么值依?閉包是用來做什么的圃泡?
  • 概念
    閉包并不是什么新奇的概念,它早在高級(jí)語言開始發(fā)展的年代就產(chǎn)生了愿险。閉包(Closure)是詞法閉包(Lexical Closure)的簡稱颇蜡。對(duì)閉包的具體定義有很多種說法,這些說法大體可以分為兩類:
    一種說法認(rèn)為閉包是符合一定條件的函數(shù)辆亏,中這樣定義閉包:閉包是在其詞法上下文中引用了自由變量
    另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體风秤。中就有這樣的的定義:在實(shí)現(xiàn)深約束,需要?jiǎng)?chuàng)建一個(gè)能顯式表示引用環(huán)境的東西扮叨,并將它與相關(guān)的子程序捆綁在一起缤弦,這樣捆綁起來的整體被稱為閉包。
  • 進(jìn)階理解
    這兩種定義在某種意義上是對(duì)立的彻磁,一個(gè)認(rèn)為閉包是函數(shù)碍沐,另一個(gè)認(rèn)為閉包是函數(shù)和引用環(huán)境組成的整體狸捅。雖然有些咬文嚼字,但可以肯定第二種說法更確切累提。閉包只是在形式和表現(xiàn)上像函數(shù)尘喝,但實(shí)際上不是函數(shù)。函數(shù)是一些可執(zhí)行的代碼斋陪,這些代碼在函數(shù)被定義后就確定了朽褪,不會(huì)在執(zhí)行時(shí)發(fā)生變化,所以一個(gè)函數(shù)只有一個(gè)實(shí)例无虚。閉包在運(yùn)行時(shí)可以有多個(gè)實(shí)例缔赠,不同的引用環(huán)境和相同的函數(shù)組合可以產(chǎn)生不同的實(shí)例。所謂引用環(huán)境是指在程序執(zhí)行中的某個(gè)點(diǎn)所有處于活躍狀態(tài)的約束所組成的集合骑科。其中的約束是指一個(gè)變量的名字和其所代表的對(duì)象之間的聯(lián)系。那么為什么要把引用環(huán)境與函數(shù)組合起來呢构拳?這主要是因?yàn)樵谥С智短鬃饔糜虻恼Z言中咆爽,有時(shí)不能簡單直接地確定函數(shù)的引用環(huán)境。這樣的語言一般具有這樣的特性:
    1 函數(shù)是一階值(First-class value)置森,即函數(shù)可以作為另一個(gè)函數(shù)的返回值或參數(shù)斗埂,還可以作為一個(gè)變量的值。
    2 函數(shù)可以嵌套定義凫海,即在一個(gè)函數(shù)內(nèi)部可以定義另一個(gè)函數(shù)呛凶。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市行贪,隨后出現(xiàn)的幾起案子漾稀,更是在濱河造成了極大的恐慌,老刑警劉巖建瘫,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崭捍,死亡現(xiàn)場離奇詭異,居然都是意外死亡啰脚,警方通過查閱死者的電腦和手機(jī)殷蛇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橄浓,“玉大人粒梦,你說我怎么就攤上這事≥┦担” “怎么了匀们?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長准给。 經(jīng)常有香客問我昼蛀,道長宴猾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任叼旋,我火速辦了婚禮仇哆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夫植。我一直安慰自己讹剔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布详民。 她就那樣靜靜地躺著延欠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沈跨。 梳的紋絲不亂的頭發(fā)上由捎,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音饿凛,去河邊找鬼狞玛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涧窒,可吹牛的內(nèi)容都是我干的心肪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纠吴,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼硬鞍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戴已,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤固该,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糖儡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹬音,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年休玩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了著淆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拴疤,死狀恐怖永部,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呐矾,我是刑警寧澤苔埋,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蜒犯,受9級(jí)特大地震影響组橄,放射性物質(zhì)發(fā)生泄漏荞膘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一玉工、第九天 我趴在偏房一處隱蔽的房頂上張望羽资。 院中可真熱鬧,春花似錦遵班、人聲如沸屠升。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腹暖。三九已至,卻和暖如春翰萨,著一層夾襖步出監(jiān)牢的瞬間脏答,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工亩鬼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留殖告,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓辛孵,卻偏偏與公主長得像丛肮,于是被迫代替她去往敵國和親赡磅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子魄缚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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