博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

这是关于JS 闭包的最短一篇

Posted on 2011-08-18 11:47  xuld  阅读(434)  评论(0编辑  收藏  举报
function a(){
      var i=0;
 }

a();
每次a执行的时候,都会创建一个新的执行环境,并在这个环境创建变量i,也就是说,每次的i是不一样的。这样就叫函数a对变量i的闭包。
这样的代码是典型的没有闭包的代码:
for(var i = 0; i < 9;i++){
   a.childNodes[i].onclick = function(){
      alert(i);
  };
}
它有个问题,就是变量i只有1个,最后输出的都是当前的i(=9)。要想保存执行时的i,就要利用闭包。使每次的i都不同
for(var i = 0; i < 9;i++){
   var fn = function(m){
       var  i = m;       // 利用fn保存i。 
       return function(){
           alert(i);  // 我们已经利用闭包,把变量i保存起来了
       };
   };
   a.childNodes[i].onclick = fn(i);
}