JavaScript閉包

閉包是有權(quán)訪問另外一個函數(shù)作用域中變量的函數(shù)


在了解閉包之前跛十,需要先了解幾個概念,具體如下:

當(dāng)某個環(huán)境被調(diào)用的時候,會創(chuàng)建一個執(zhí)行環(huán)境以及相應(yīng)的作用域鏈池充。然后,使用arguments和其他命名參數(shù)的值來初始化函數(shù)的活動對象缎讼。但在作用域鏈中收夸,外部函數(shù)的活動對象始終在第二位,外部函數(shù)的外部函數(shù)血崭,排在了第三位卧惜,以此類推厘灼,排外最尾部的是全局執(zhí)行環(huán)境。


執(zhí)行環(huán)境

執(zhí)行環(huán)境(execution context)又稱為執(zhí)行上下文序苏,有時直接稱之為環(huán)境手幢,是JavaScript中一個很重要的概念。通過它可以判斷變量或者函數(shù)是否有權(quán)訪問其他數(shù)據(jù)忱详。每個執(zhí)行環(huán)境都有一個變量對象(variable object)围来,這個對象中包含了在這個環(huán)境中定義的所有的變量和函數(shù)。全局執(zhí)行環(huán)境是最底層的執(zhí)行環(huán)境匈睁。在web瀏覽器中监透,全局執(zhí)行環(huán)境被認為是window對象,因此所有的全局變量和函數(shù)都是作為window對象的屬性和方法創(chuàng)建的航唆。當(dāng)某個執(zhí)行環(huán)境里面的代碼全部執(zhí)行完畢的時候胀蛮,該環(huán)境就會被銷毀,包括該環(huán)境中的所有變量糯钙,定義的函數(shù)也會隨之銷毀粪狼。而全局執(zhí)行環(huán)境是一直到關(guān)閉瀏覽器才會被銷毀。

每個函數(shù)都有自己的執(zhí)行環(huán)境任岸,當(dāng)執(zhí)行流進入這個函數(shù)的時候再榄,函數(shù)的環(huán)境就會被推入一個環(huán)境棧中,當(dāng)函數(shù)執(zhí)行完畢后享潜,棧將其環(huán)境彈出困鸥。


作用域鏈

當(dāng)代碼在環(huán)境中執(zhí)行時,會創(chuàng)建變量對象的一個作用域鏈剑按。作用域鏈的作用是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問疾就。他的本質(zhì)上是一個指向變量對象的指針列表。其第一個節(jié)點里有當(dāng)前環(huán)境的變量對象(如果環(huán)境是函數(shù)艺蝴,這把活動對象(一開始為arguments)作為變量對象)猬腰。第二個節(jié)點為其環(huán)境的下一個包含環(huán)境的變量對象以此類推,一直到全局執(zhí)行環(huán)境包含的變量對象(全局環(huán)境沒有arguments)猜敢。

尋找某一個變量或者函數(shù)時漆诽,都是沿著作用域鏈開始層層往后搜索,一直到找到為止锣枝,如果找不到,則返回undefined兰英。


閉包

閉包的概念其實并不復(fù)雜撇叁,就是有權(quán)訪問另外一個函數(shù)作用域中變量的函數(shù)通常的創(chuàng)建方式為一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù)畦贸。

當(dāng)然陨闹,還有一種更廣泛的理解楞捂,只要是內(nèi)部函數(shù)以值傳遞的形式,或者當(dāng)做參數(shù)趋厉,傳遞給外部函數(shù)寨闹,那么就發(fā)生了閉包


PS

1.閉包中內(nèi)部函數(shù)取得外部函數(shù)的變量永遠是最后一個值。

2.閉包中君账,內(nèi)部函數(shù)永遠無法取到外部函數(shù)的thisarguments繁堡,只能取到活動對象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乡数,一起剝皮案震驚了整個濱河市椭蹄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌净赴,老刑警劉巖绳矩,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玖翅,居然都是意外死亡翼馆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門金度,熙熙樓的掌柜王于貴愁眉苦臉地迎上來应媚,“玉大人,你說我怎么就攤上這事审姓≌涮兀” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵魔吐,是天一觀的道長扎筒。 經(jīng)常有香客問我,道長酬姆,這世上最難降的妖魔是什么嗜桌? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮辞色,結(jié)果婚禮上骨宠,老公的妹妹穿的比我還像新娘。我一直安慰自己相满,他們只是感情好层亿,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著立美,像睡著了一般匿又。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上建蹄,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天碌更,我揣著相機與錄音裕偿,去河邊找鬼。 笑死痛单,一個胖子當(dāng)著我的面吹牛嘿棘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旭绒,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼鸟妙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了快压?” 一聲冷哼從身側(cè)響起圆仔,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔫劣,沒想到半個月后坪郭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡脉幢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年歪沃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫌松。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡沪曙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萎羔,到底是詐尸還是另有隱情液走,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布贾陷,位于F島的核電站缘眶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏髓废。R本人自食惡果不足惜巷懈,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望慌洪。 院中可真熱鬧顶燕,春花似錦、人聲如沸冈爹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽频伤。三九已至癣漆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剂买,已是汗流浹背惠爽。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞬哼,地道東北人婚肆。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像坐慰,于是被迫代替她去往敵國和親较性。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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

  • 閉包(closure)是Javascript語言的一個難點结胀,也是它的特色赞咙,很多高級應(yīng)用都要依靠閉包實現(xiàn)。 一糟港、變量...
    zouCode閱讀 1,271評論 0 13
  • 目錄 1.執(zhí)行環(huán)境與作用域鏈 2. 立即執(zhí)行函數(shù) 3. 閉包知識點 3.1 什么是閉包 3.2 使用閉包的意義與注...
    犯迷糊的小羊閱讀 629評論 0 11
  • 閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)攀操。比較常見的創(chuàng)建閉包方式,就是在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù)秸抚。如 上面...
    碼不停蹄的憂傷閱讀 220評論 0 1
  • 閉包 閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)速和。 創(chuàng)建閉包的常見方式,就是在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù)剥汤。 當(dāng)...
    shanruopeng閱讀 279評論 0 1
  • 文/穎雪兒 我叫慧敏颠放,是唐朝鼎鼎有名的公主,我的本領(lǐng)有很多如作詩吭敢、樂器碰凶、舞蹈、下棋等鹿驼,可以說是天下人公判的美貌加智...
    穎敏雪兒閱讀 187評論 1 3