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

淺析javascript閉包 實例分析

 更新時間:2010年12月25日 22:35:43   作者:  
閉包是一個擁有許多變量和綁定了這些變量的環(huán)境表達式(通常是一個函數(shù)),因而這些變量也是環(huán)境表達式的一部分。
官方解釋
“閉包”是一個擁有許多變量和綁定了這些變量的環(huán)境表達式(通常是一個函數(shù)),因而這些變量也是環(huán)境表達式的一部分。
通俗解釋
Javascript中所有的函數(shù)都是一個閉包。不過一般來說,嵌套的function產生的閉包更為強大,也是大部分時候我們所說的“閉包”。看如下代碼:
復制代碼 代碼如下:

<script type="text/javascript">
<!--
//外層函數(shù)a
function a(){
//臨時變量i
var i = 0;
//內層函數(shù)b
function b(){
//引用外層臨時變量i
alert(++i);
}
//執(zhí)行結果,返回內層函數(shù)b
return b;
}
//執(zhí)行外層函數(shù)a,同時給c一個指向內層函數(shù)b的引用
//若按正常理解,此語句執(zhí)行完后i將被GC回收,此時的i應為“undefine”
var c = a();
//執(zhí)行內層函數(shù),由于閉包的緣故,函數(shù)b中i仍然引用的是外部的臨時變量i
c();
-->
</script>

這段腳本在執(zhí)行完var c=a()之后,變量c實際上就指向了函數(shù)b,b中用到了變量i,再執(zhí)行c()后就會彈出一個窗口顯示i的值。這段代碼其實就是一個閉包,為什么?因為函數(shù)a外的變量c引用了函數(shù)a內部的函數(shù)b。
Javascript的垃圾回收機制
由于javascript特殊的垃圾回收機制,才導致了閉包的產生。Javascript垃圾回收機制的大體規(guī)則如下:
在javascript中,如果一個對象不再被引用,那么這個對象就會被GC回收。如果兩個對象相互引用,而不再被第3者引用,那么這兩個互相引用的對象也會被回收。而在上述的腳本中,函數(shù)a被b引用,函數(shù)b又被函數(shù)a外的c所引用,這就是為什么函數(shù)a執(zhí)行后不被回收的原因。
閉包的應用場景
1. 保護函數(shù)內的變量安全。以上面的例子為例,函數(shù)a中變量i只有函數(shù)b才能訪問,而無法通過其他途徑訪問到,因此保護了i的安全性。
2. 在內存中維持一個變量。依然如上面的例子,由于閉包,函數(shù)a中的i一直存在于內存中,因此每次執(zhí)行c(),i都會加1。
3. 通過保護變量的安全實現(xiàn)JS私有屬性和私有方法(不能被外部訪問)。如下,私有屬性和私有方法在Constructor外是無法訪問的:
復制代碼 代碼如下:

function Constructor(…){
var that = this;
var membername = value;
function membername(…){…}
}

相關文章

最新評論

淅川县| 昂仁县| 无锡市| 竹北市| 吉首市| 桂阳县| 监利县| 邵东县| 新郑市| 光山县| 龙南县| 沙田区| 万州区| 翁源县| 嘉禾县| 广平县| 金川县| 周口市| 连山| 商洛市| 赤水市| 宜宾市| 宁津县| 彭水| 廉江市| 石河子市| 松江区| 莫力| 岑溪市| 改则县| 澜沧| 大同县| 娄底市| 永德县| 永修县| 四川省| 高雄县| 北辰区| 南宫市| 台中市| 科技|