JavaScript 使用閉包
■實(shí)例設(shè)計(jì)
【示例1】使用閉包實(shí)現(xiàn)優(yōu)雅的打包,定義存儲(chǔ)器。
var f = function () { //外部函數(shù)
var a =[] //私有數(shù)組初始化
return function(x){ //返回內(nèi)部函數(shù)
a.push(x); //添加元素
return a; //返回私有數(shù)組
};
}(); //直接調(diào)用函數(shù),生成執(zhí)行環(huán)境
var a = f(1); //添加值
console.log(a); //返回1
var b = f(2); //添加值
console.log(b); //返回1,2
在上面的示例中,通過外部函數(shù)設(shè)計(jì)一個(gè)閉包,定義一個(gè)永久的存儲(chǔ)器。當(dāng)調(diào)用外部函數(shù),生成執(zhí)行環(huán)境之后,就可以利用返回的匿名函數(shù),不斷向閉包體內(nèi)的數(shù)組a傳入新值,傳入的值會(huì)一直持續(xù)存在。
【示例2】在網(wǎng)頁中事件處理函數(shù)很容易形成閉包。
<script>
function f () { //事件處理函數(shù),閉包
var a = 1; //私有變量a,初始化為1
b = function(){ //開放私有函數(shù)
console.log( "a = " + a ); //讀取a的值
}
c = function () { //開放私有函數(shù)
a ++ ; //遞增a的值
}
d = function ( ){ //開放私有函數(shù)
a --; //遞減a的值
}
</script>
<button onclick="f ()">生成閉包</button>
<button onclick="b ()">查看 a 的值</button>
<button onclick="c ()">遞 增</button>
<button onclick="d ()">遞 減</button>
在瀏覽器中瀏覽時(shí),首先單擊“生成閉包”按鈕,生成一個(gè)閉包。單擊第2個(gè)按鈕,可以隨時(shí)查看閉包內(nèi)私有變量a的值。單擊第3、4個(gè)按鈕時(shí),可以動(dòng)態(tài)修改閉包內(nèi)變量a的值。
點(diǎn)擊加載更多評(píng)論>>