为了账号安全,请及时绑定邮箱和手机立即绑定

代码输出结果疑问

代码输出结果疑问

咩咩咩3124927 2016-09-25 01:15:10
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

查看完整回答
2 反对 回复 2016-09-25
?
蓝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]());

}


查看完整回答
反对 回复 2016-09-25
  • 2 回答
  • 0 关注
  • 1537 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信