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

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

}

你可能感兴趣的:(js)