问题描述
function xxx(){ ss=[] for(var i=0;i<6;i++) { var ii= i; var s = function () { alert(ii) } ss[i] = s; } ss[1]();} 问题补充:问题是变量ii是局部变量啊,作用域在for里面,每次循环ii都不是同一个变量。 simoncz 写道
解决方案
在执行函数的时候使用的是最后一个声明变量ii,之前声明的ii变量都会被覆盖
解决方案二:
主要是内部函数对ii进行了引用function xxx(){ ss=[] for(var i=0;i<6;i++) { var ii = i; var s = function (y) { return function(){alert(y);} }(ii); ss[i] = s; } ss[1](); } 以上代码主要是执行函数吧ii作为参数传递。返回一个匿名函数以用参数y,这样返回的才是1
解决方案三:
这个循环里面的ii最后已经变成5了,function xxx(){ ss=[] for(var i=0;i<6;i++) { var ii = i; ss[i] = "s("+ii+")"; } eval(ss[1]);}var s = function (ii) { alert(ii) }这样才是1
时间: 2024-08-01 13:30:35