代码输出结果疑问

var fnArr=[];
for(var i=0;i<10;i++){
  fnArr[i]=function(){
    return i;
  };
}
alert(fnArr[3]());

最后输出的结果是10.百思不得其解,可有同学帮我解释下,多谢了.

咩咩咩3124927
浏览 1538回答 2
2回答

阿旭_

因为返回的变量是最终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黑

因为循环最后都是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]());}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript