国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript的閉包

2024-05-06 14:12:09
字體:
供稿:網(wǎng)友

簡介
Closure
所謂“閉包”,指的是一個擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個函數(shù)),因而這些變量也是該表達(dá)式的一部分。
閉包是 ECMAScript (JavaScript)最強(qiáng)大的特性之一,但用好閉包的前提是必須理解閉包。閉包的創(chuàng)建相對容易,人們甚至?xí)诓唤?jīng)意間創(chuàng)建閉包,但這些無意創(chuàng)建的閉包卻存在潛在的危害,尤其是在比較常見的瀏覽器環(huán)境下。如果想要揚(yáng)長避短地使用閉包這一特性,則必須了解它們的工作機(jī)制。而閉包工作機(jī)制的實(shí)現(xiàn)很大程度上有賴于標(biāo)識符(或者說對象屬性)解析過程中作用域的角色。

關(guān)于閉包,最簡單的描述就是 ECMAScript 允許使用內(nèi)部函數(shù)--即函數(shù)定義和函數(shù)表達(dá)式位于另一個函數(shù)的函數(shù)體內(nèi)。而且,這些內(nèi)部函數(shù)可以訪問它們所在的外部函數(shù)中聲明的所有局部變量、參數(shù)和聲明的其他內(nèi)部函數(shù)。當(dāng)其中一個這樣的內(nèi)部函數(shù)在包含它們的外部函數(shù)之外被調(diào)用時,就會形成閉包。也就是說,內(nèi)部函數(shù)會在外部函數(shù)返回后被執(zhí)行。而當(dāng)這個內(nèi)部函數(shù)執(zhí)行時,它仍然必需訪問其外部函數(shù)的局部變量、參數(shù)以及其他內(nèi)部函數(shù)。這些局部變量、參數(shù)和函數(shù)聲明(最初時)的值是外部函數(shù)返回時的值,但也會受到內(nèi)部函數(shù)的影響。

遺憾的是,要適當(dāng)?shù)乩斫忾]包就必須理解閉包背后運(yùn)行的機(jī)制,以及許多相關(guān)的技術(shù)細(xì)節(jié)。雖然本文的前半部分并沒有涉及 ECMA 262 規(guī)范指定的某些算法,但仍然有許多無法回避或簡化的內(nèi)容。對于個別熟悉對象屬性名解析的人來說,可以跳過相關(guān)的內(nèi)容,但是除非你對閉包也非常熟悉,否則最好是不要跳過下面幾節(jié)。

對象屬性名解析
ECMAScript 認(rèn)可兩類對象:原生(Native)對象和宿主(Host)對象,其中宿主對象包含一個被稱為內(nèi)置對象的原生對象的子類(ECMA 262 3rd Ed Section 4.3)。原生對象屬于語言,而宿主對象由環(huán)境提供,比如說可能是文檔對象、DOM 等類似的對象。

原生對象具有松散和動態(tài)的命名屬性(對于某些實(shí)現(xiàn)的內(nèi)置對象子類別而言,動態(tài)性是受限的--但這不是太大的問題)。對象的命名屬性用于保存值,該值可以是指向另一個對象(Objects)的引用(在這個意義上說,函數(shù)也是對象),也可以是一些基本的數(shù)據(jù)類型,比如:String、Number、Boolean、Null 或 Undefined。其中比較特殊的是 Undefined 類型,因?yàn)榭梢越o對象的屬性指定一個 Undefined 類型的值,而不會刪除對象的相應(yīng)屬性。而且,該屬性只是保存著 undefined 值。

下面簡要介紹一下如何設(shè)置和讀取對象的屬性值,并最大程度地體現(xiàn)相應(yīng)的內(nèi)部細(xì)節(jié)。

值的賦予
對象的命名屬性可以通過為該命名屬性賦值來創(chuàng)建,或重新賦值。即,對于:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 白玉县| 民勤县| 聂拉木县| 忻城县| 洪江市| 吉林省| 余江县| 尉犁县| 綦江县| 威信县| 建始县| 建水县| 明光市| 友谊县| 田阳县| 滦平县| 玉门市| 茌平县| 娱乐| 鹤山市| 万荣县| 武冈市| 闻喜县| 丰顺县| 车致| 东山县| 牡丹江市| 莱阳市| 中阳县| 宝清县| 准格尔旗| 旬邑县| 安陆市| 谷城县| 泊头市| 桓台县| 漳平市| 阜南县| 布拖县| 犍为县| 周至县|