首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

闭包学习之小弟我的理解

2012-11-06 
闭包学习之我的理解学习资料http://abruzzi.iteye.com/blog/658473htmlheadtitle/title/headbo

闭包学习之我的理解
学习资料
http://abruzzi.iteye.com/blog/658473

<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;            }                    }    };})();

热点排行