最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript 設(shè)計模式(二) 閉包

 更新時間:2010年05月26日 22:14:34   作者:  
本來應(yīng)該是第二章,接口,但因為閉包實在不懂,所以先看看閉包
正文

閉包的概念:

閉包是一個擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個函數(shù)),因而這些變量也是該表達(dá)式的一部分。

最常見的閉包


復(fù)制代碼 代碼如下:

function a() {
var i=0;
return function(){
alert(i++);
}
}
var b=a();
for(var i=0;i<3;i++){
b();
}


解釋上面代碼前,先接受一個函數(shù)的創(chuàng)建和執(zhí)行過程

第一步:定義函數(shù),設(shè)置環(huán)境,創(chuàng)建作用域鏈(scope chain)現(xiàn)a為全局變量,則a的作用域鏈中只有window

第二步:執(zhí)行a, 首先創(chuàng)建作用域(a.scope=a),然后創(chuàng)建活動對象(callObject),并將callObject放入a的作用域鏈的頂端,因此a的作用域鏈中含有兩個對象(a和window)

第三步:在活動對象上添加一個arguments屬性,保存調(diào)用a時的參數(shù)值

第四步:將形參和內(nèi)部變量賦值到活動對象a上

javascriptGC原理:如果一個對象不再被引用,那么這個對象會被GC回收。如果兩個對象無干擾的互相引用,那么這兩個對象也會被回收。

總結(jié):

1、首先定義a時,創(chuàng)建了a的作用域鏈(scope chain)

2、(var b=a())執(zhí)行a時,創(chuàng)建作用域a.scope=a,并創(chuàng)建callObject對象添加a的作用域中

3、a對象上添加了arguments屬性,并將i和return函數(shù)賦值給活動對象

4、執(zhí)行a時將b指向了a的ruturn函數(shù)值,在b中又引用的a中的局部變量i,因此不符合GC的回收標(biāo)準(zhǔn),活動對象a沒有被回收,因此b訪問i是第一次訪問的對象,并且只有在b中才能訪問

相關(guān)文章

最新評論

柞水县| 利辛县| 江西省| 庆元县| 绥棱县| 锡林郭勒盟| 沭阳县| 七台河市| 时尚| 内黄县| 武功县| 沂源县| 运城市| 丰顺县| 巴青县| 雷波县| 浦北县| 万全县| 梅河口市| 北安市| 岳普湖县| 沈丘县| 青河县| 抚松县| 巴林右旗| 芜湖县| 辰溪县| 拜泉县| 方山县| 海宁市| 宁明县| 忻州市| 马关县| 宜良县| 金沙县| 临清市| 班玛县| 松潘县| 新泰市| 巫溪县| 靖州|