<div class="codetitle"> <span><a style="CURSOR: pointer" data="93281" class="copybut" id="copybut93281" onclick="doCopy('code93281')"><u>复制代码</u></a></span> 代码如下:</div> <div class="codebody" id="code93281"> <br><script type="text/javascript"> <BR>function createArray() { <BR>var arr = new Array(); <BR>for (var i = 0; i < 10; i++) { <BR>arr[i] = function () { <BR>return i; <BR>} <BR>} <BR>return arr; <BR>} <BR>var funcs = createArray(); <BR>for (var i = 0; i < funcs.length; i++) { <BR>document.write(funcs[i]() + "<br />"); <BR>} <BR>//以上输出全部是i的最后一次的值(10),即会输出10个10,显然这不是我们想要的 <BR>//原因:因为每个函数都保存了createArray函数的活动对象,所以他们引用的都是同一个i(按引用传的值) <BR>//解决方案:把按引用传参修改为按值传参 <BR>function createArray() { <BR>var arr = new Array(); <BR>for (var i = 0; i < 10; i++) { <BR>arr[i] = function (num) { <BR>return function () { <BR>return num; <BR>} <BR>} (i);//调用此匿名函数返回内部匿名函数,这里多了一步按值传递参数 <BR>} <BR>return arr; <BR>} <BR>var funcs = createArray(); <BR>for (var i = 0; i < funcs.length; i++) { <BR>alert(funcs[i]() + "<br />"); <BR>} <BR>//以上输出的为理想结果 <BR></script> <br> </div>