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

相关文章:

  • 2021-11-22
  • 2022-12-23
  • 2021-06-19
  • 2021-05-29
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2022-12-23
  • 2022-01-10
  • 2022-01-01
  • 2021-10-05
相关资源
相似解决方案