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

这个结果为什么全都是16而不是全都是9 i<=3应该 3*3等于9啊 我很不解

这个结果为什么全都是16而不是全都是9 i<=3应该 3*3等于9啊 我很不解

名渊 2017-09-20 23:51:32
function count() {    var arrs = [];    for(var i = 1;i<=3;i++){        arrs.push(function () {            return i * i;        });    }    return arrs;}var result = count();var fire1 = result[0];var fire2 = result[1];var fire3 = result[2];console.log(fire1());console.log(fire2());console.log(fire3());
查看完整描述

3 回答

已采纳
?
夜舞暗澜

TA贡献19条经验 获得超7个赞

arr.push()的参数为function类型。

当输出 result=[ function(){ return i * i }, function(){ return i * i }, function(){ return i * i } ]时,result的 i 默默地循环了三遍,停在了 i=4 上。

然后当你使用 result[0]() 时,将i=4带入function,得到16。

循环会在设置好时调用,不会等着你,但是function只会在调用时调用。


查看完整回答
反对 回复 2017-09-21
?
慕瓜2309318

TA贡献5条经验 获得超1个赞

function count() {

  var arrs = [];

  for(var i = 1;i<=3;i++){

      arrs.push(i * i); //此处代码修改

  }

  return arrs;

}

var result = count();


var fire1 = result[0];

var fire2 = result[1];

var fire3 = result[2];


console.log(fire1);//此处代码修改

console.log(fire2);//此处代码修改

console.log(fire3);//此处代码修改


你的代码中,count() 方法中,arrs是你获得的 一个含有方法的的集合,i最后的值为4,把前面的值都给覆盖掉了


查看完整回答
反对 回复 2017-09-21
?
橋本奈奈未

TA贡献436条经验 获得超108个赞

最后一次i++变成4但没有进入循环

查看完整回答
反对 回复 2017-09-21
  • 名渊
    名渊
    为什么最后i++会变成4 但没有进入循环 能不能说的清楚点 到底为什么?
  • 橋本奈奈未
    橋本奈奈未
    你自己写的i<=3才条件才成立啊那i不是要等于4才会退出循环吗
  • 3 回答
  • 0 关注
  • 1884 浏览
慕课专栏
更多

添加回答

举报

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