闭包学习之我的理解

学习资料
[url]http://abruzzi.iteye.com/blog/658473[/url]


<html>

<head>

<title></title>

</head>

<body>
<div>demo</div>
<button id="xxxt" onclick="xx()">toggle</button>
</body>

</html>
<script language="javascript" type="text/javascript">
/**
如下例,内部函数引用外部函数的变量(这里是变量i)
该内部函数即形成闭包,"闭"是指内部函数中的变量对于外部不可见(而内部函数可以引用外部变量)
思考:照此理解,我们应该经常在不知不觉中使用着闭包,只要我们在客户端环境下定义一个函数,而
该函数引用了全局变量,那么这不就是一个闭包?因为该函数和全局变量是属于windows这个顶级对象的
*/
var arr=[];
var def=function (){

for(i=0;i<3;i++){
arr.push({
'id':i,
'getIndex':function (){
return ("第"+i+"个元素");
}
});

}


}
def();


/*
注意运行结果,闭包里变量的值并不是创建时的值,而是外部函数中该变量最后的值
(只是创建了一个' return ("第"+i+"个元素"); '的函数体)
*/
alert(arr[0].id+":"+arr[0].getIndex());//0:第3个元素
alert(arr[1].id+":"+arr[1].getIndex());//1:第3个元素
alert(arr[2].id+":"+arr[2].getIndex());//2:第3个元素

/**
闭包的用途
1 减少全局变量,避免污染
2 记忆数据状态
*/

var counter=(function (){
var cache={};//使用闭包和匿名自执行函数,将该变量封装起来,减少全局变量污染,而且"记忆"内部函数函数的运算结果
return {
'count':function (n){
if(cache.n&&cache.n==n){
alert('取得是缓存值');
return cache['result'];
}else{
var v= n*n;
cache.n=n;
cache.result=v;
return v;
}

}
};

})();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值