一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

Javascript的閉包

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

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

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

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

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

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

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

var objectRef = new Object(); //創(chuàng)建一個普通的 Javascript 對象。
可以通過下面語句來創(chuàng)建名為 “testNumber” 的屬性:

objectRef.testNumber = 5;
/* - 或- */
objectRef["testNumber"] = 5;
在賦值之前,對象中沒有“testNumber” 屬性,但在賦值后,則創(chuàng)建一個屬性。之后的任何賦值語句都不需要再創(chuàng)建這個屬性,而只會重新設置它的值:

objectRef.testNumber = 8;
/* - 或- */
objectRef["testNumber"] = 8;
稍后我們會介紹,Javascript 對象都有原型(prototypes)屬性,而這些原型本身也是對象,因而也可以帶有命名的屬性。但是,原型對象命名屬性的作用并不體現(xiàn)在賦值階段。同樣,在將值賦給其命名屬性時,如果對象沒有該屬性則會創(chuàng)建該命名屬性,否則會重設該屬性的值。

更詳細的請查看下面的文章:
http://demo.jb51.NET/js/Javascript_bibao/index.htm

JavaScript技術Javascript的閉包,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 97午夜| 大杳蕉伊人狼人久久一本线 | 国产精品自在线拍国产 | 久久精品乱子伦观看 | 国产女同一区二区三区五区 | 国产永久视频 | 亚洲国产婷婷综合在线精品 | 国产久视频 | 91国内外精品自在线播放 | 国产欧美性综合视频性刺激 | 国产精品视频一区二区噜噜 | 亚洲六月丁香六月婷婷花 | 91视频一区 | 二区三区视频 | 欧美wwwxxx| 国产精品久久久99 | 精品国产91久久久久久久 | 天天色天天色 | 九九99九九精彩 | 在线视频免费国产成人 | 国内自拍视频在线看免费观看 | 久热久操 | 国产精品免费视频播放 | 美女视频黄频大全免费视频 | 青草国产在线观看 | 成人国产网站 | 亚洲美女一级毛片 | 成人在线视频免费看 | 国产区在线观看视频 | 国产综合在线视频 | 成年美女黄网站色大 | 亚洲欧美一区二区三区麻豆 | 亚洲国产最新在线一区二区 | 日本 ed2k| 日本在线一区二区 | 开心丁香婷婷深爱五月 | 久久久久久久国产精品 | 欧美人xxxx另类 | 精品日韩欧美一区二区三区 | 91久久香蕉 | 久9精品视频 |