热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> AJAX编程>>正文内容

JavaScript中解决闭包只能取得包含函数中任何变量最后一个值的问题

发布时间:2010年08月11日点击数: 佚名
  1. <script type="text/javascript"
  2.     function createArray() { 
  3.         var arr = new Array(); 
  4.         for (var i = 0; i < 10; i++) { 
  5.             arr[i] = function () { 
  6.                 return i; 
  7.             } 
  8.         } 
  9.  
  10.         return arr; 
  11.     } 
  12.  
  13.     var funcs = createArray(); 
  14.     for (var i = 0; i < funcs.length; i++) { 
  15.         document.write(funcs[i]() + "<br />"); 
  16.     } 
  17.     //以上输出全部是i的最后一次的值(10),即会输出10个10,显然这不是我们想要的 
  18.     //原因:因为每个函数都保存了createArray函数的活动对象,所以他们引用的都是同一个i(按引用传的值) 
  19.     //解决方案:把按引用传参修改为按值传参 
  20.  
  21.     function createArray() { 
  22.         var arr = new Array(); 
  23.  
  24.         for (var i = 0; i < 10; i++) { 
  25.             arr[i] = function (num) { 
  26.                 return function () { 
  27.                     return num; 
  28.                 } 
  29.             } (i);//调用此匿名函数返回内部匿名函数,这里多了一步按值传递参数 
  30.         } 
  31.  
  32.         return arr; 
  33.     } 
  34.     var funcs = createArray(); 
  35.     for (var i = 0; i < funcs.length; i++) { 
  36.         alert(funcs[i]() + "<br />"); 
  37.     } 
  38.     //以上输出的为理想结果 
  39. </script> 

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作