西门吹牛 发表于 2013-1-28 12:41:49

闭包学习之我的理解

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

<html><head><title></title></head><body><div>demo</div><button id="xxxt" >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.id+":"+arr.getIndex());//0:第3个元素alert(arr.id+":"+arr.getIndex());//1:第3个元素alert(arr.id+":"+arr.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;            }                  }    };})();
页: [1]
查看完整版本: 闭包学习之我的理解