闭包定义
作者:Yan
閉包的定義似乎眾說(shuō)紛云。我整理出一些定義:
描述一:
所謂“閉包”,指的是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。?閉包是 ECMAScript (JavaScript)最強(qiáng)大的特性之一,但用好閉包的前提是必須理解閉包。閉包的創(chuàng)建相對(duì)容易,人們甚至?xí)诓唤?jīng)意間創(chuàng)建閉包,但這些無(wú)意創(chuàng)建的閉包卻存在潛在的危害,尤其是在比較常見(jiàn)的瀏覽器環(huán)境下。如果想要揚(yáng)長(zhǎng)避短地使用閉包這一特性,則必須了解它們的工作機(jī)制。而閉包工作機(jī)制的實(shí)現(xiàn)很大程度上有賴(lài)于標(biāo)識(shí)符(或者說(shuō)對(duì)象屬性)解析過(guò)程中作用域的角色。 關(guān)于閉包,最簡(jiǎn)單的描述就是 ECMAScript 允許使用內(nèi)部函數(shù)--即函數(shù)定義和函數(shù)表達(dá)式位于另一個(gè)函數(shù)的函數(shù)體內(nèi)。而且,這些內(nèi)部函數(shù)可以訪問(wèn)它們所在的外部函數(shù)中聲明的所有局部變量、參數(shù)和聲明的其他內(nèi)部函數(shù)。當(dāng)其中一個(gè)這樣的內(nèi)部函數(shù)在包含它們的外部函數(shù)之外被調(diào)用時(shí),就會(huì)形成閉包。也就是說(shuō),內(nèi)部函數(shù)會(huì)在外部函數(shù)返回后被執(zhí)行。而當(dāng)這個(gè)內(nèi)部函數(shù)執(zhí)行時(shí),它仍然必需訪問(wèn)其外部函數(shù)的局部變量、參數(shù)以及其他內(nèi)部函數(shù)。這些局部變量、參數(shù)和函數(shù)聲明(最初時(shí))的值是外部函數(shù)返回時(shí)的值,但也會(huì)受到內(nèi)部函數(shù)的影響。 描述二: 閉包是指某種程序語(yǔ)言中的代碼塊允許一級(jí)函數(shù)存在并且在一級(jí)函數(shù)中所定義的自由變量能不被釋放,直到一級(jí)函數(shù)被釋放前,一級(jí)函數(shù)外也能應(yīng)用這些未釋放的自由變量。? 閉包,其實(shí)是一種語(yǔ)言特性,它是指的是程序設(shè)計(jì)語(yǔ)言中,允許將函數(shù)看作對(duì)象,然后能像在對(duì)象中的操作般在函數(shù)中定義實(shí)例(局部)變量,而這些變量能在函數(shù)中保存到函數(shù)的實(shí)例對(duì)象銷(xiāo)毀為止,其它代碼塊能通過(guò)某種方式獲取這些實(shí)例(局部)變量的值并進(jìn)行應(yīng)用擴(kuò)展。?
描述三: 閉包意味著內(nèi)層函數(shù)可以引用存在于包圍它的函數(shù)內(nèi)的變量,即使外層函數(shù)的執(zhí)行已經(jīng)終止。
總結(jié)
- 上一篇: js中call与apply用法
- 下一篇: Oracle+BEA后的ESB