var fnArr=[];
for(var i=0;i<10;i++){
fnArr[i]=function(){
return i;
};
}
alert(fnArr[3]());最后输出的结果是10.百思不得其解,可有同学帮我解释下,多谢了.
2 回答
已采纳
阿旭_
TA贡献217条经验 获得超353个赞
因为返回的变量是最终i的值。
如果只输出fnArr即:alert(fnArr);会看到弹出来的都是方法function(){return i;}
i是在for中声明的var i,最终for循环退出的时候,i是等于10的,所以不管你调用的是fnArr[3]()还是fnArr[4]()最终返回的i的结果都是10。
你可以试着在alert(fnArr[3]());之前加一句i=100,那返回的结果就是100
蓝with黑
TA贡献5条经验 获得超0个赞
因为循环最后都是return 最后一个;
把i<10改成i<8,再运行一次,你应该就明白了。
或:
var fnArr=[];
for(var i=0;i<10;i++){
fnArr[i]=function(){
return i;
};
}
//其实数组每项都是function(){return i},而在之前的循环后值已经是10;
for(var j=0;j<10;j++){
console.log(fnArr[j]());
}
添加回答
举报
0/150
提交
取消