天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Javascript的閉包

簡(jiǎn)介
Closure
所謂“閉包”,指的是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。
閉包是 ECMAScript (JavaScript)最強(qiáng)大的特性之一,但用好閉包的前提是必須理解閉包。閉包的創(chuàng)建相對(duì)容易,人們甚至?xí)诓唤?jīng)意間創(chuàng)建閉包,但這些無(wú)意創(chuàng)建的閉包卻存在潛在的危害,尤其是在比較常見的瀏覽器環(huán)境下。如果想要揚(yáng)長(zhǎng)避短地使用閉包這一特性,則必須了解它們的工作機(jī)制。而閉包工作機(jī)制的實(shí)現(xiàn)很大程度上有賴于標(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ù)的影響。

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

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

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

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

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

var objectRef = new Object(); //創(chuàng)建一個(gè)普通的 Javascript 對(duì)象。
可以通過(guò)下面語(yǔ)句來(lái)創(chuàng)建名為 “testNumber” 的屬性:

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

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

更詳細(xì)的請(qǐng)查看下面的文章:
http://demo.jb51.NET/js/Javascript_bibao/index.htm

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

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

主站蜘蛛池模板: 女bbbbxxx孕妇 | 成人永久免费视频 | 年轻的搜子8中字在线观看 年轻的朋友4在线看中文字幕 | 国产成人教育视频在线观看 | 99精品视频在线观看re | 优优色影院 | 亚洲日韩中文字幕日本有码 | 一级毛片视频免费 | 亚洲精品午夜久久久伊人 | 99热只有这里有精品 | 色人格影院第四色 | 色综合久久网女同蕾丝边 | 国产不卡视频在线 | 四虎一级片 | hdxxxx58丝袜连裤袜 | 涩涩网站在线看 | 国产精品乱码一区二区三 | 久久久久久天天夜夜天天 | 精品无码久久久久久动漫 | 91日本在线观看亚洲精品 | 色吧最新网址 | 久久国产免费观看精品1 | 丰满人妻熟女色情A片 | 国产亚洲精品线观看不卡 | 久久理伦片琪琪电影院 | 亚洲精品福利一区二区在线观看 | 拍戏被CAO翻了H | 草莓视频在线观看完整高清免费 | 超碰97人在线视频 | 大胸美女被c | 99在线免费视频 | 国产精品乱码色情一区二区视频 | 又亲又揉摸下面视频免费看 | 肉蒲团从国内封禁到日本成经典 | 中文字幕在线视频在线看 | 国产精品一区二区人妻无码 | 性色AV一区二区三区咪爱四虎 | qvod电影网 | 善良的小峓子2在钱中文版女主角 | 国产无线乱码一区二三区 | 国产精品…在线观看 |