【问题标题】:Why is loop not stopping at defined stop point?为什么循环不在定义的停止点停止?
【发布时间】:2018-11-09 03:36:18
【问题描述】:

我正在为一个在线课程做一个测验,测试对循环的理解。问题是:

“编写一个名为laugh() 的函数,它接受一个参数,num 表示要返回的“ha”的数量。这样console.log(laugh(3)); 打印"hahaha!"”我使用以下循环解决了这个问题:

function laugh(num) {
  var string = ""
  for (var i = 0; i < num; i++) {
    string = string + "ha";
  }
  return string + "!";
}
console.log(laugh(3));

但出于好奇,我增加了num 并让循环返回i 而不是字符串:

function laugh(num) {
  var string = "";
  for (var i = 0; i < num; i++) {
    string = string + "ha";
  }
  return i;
}

console.log(laugh(16))

这打印了16。现在我很困惑 - i 不应该只到达 15,因为循环的条件之一是 i &lt; numnum 设置为 16

【问题讨论】:

  • 测试发生在 增量之后。
  • 不,@Plotisateur,后置或前置增量对这段代码没有任何影响
  • @Plotisateur 即使是预增量 (++i),效果也是一样的 - 在 final-expression 部分完成后检查“测试”部分完成.
  • 假设 i 等于 15,那么条件 15 &lt; 16 将为真,并且您肯定仍处于循环中。所以该方法不可能返回 15。当i 达到16 的值时,循环结束(因为16 &lt; 16false)并返回该值。

标签: javascript function loops for-loop


【解决方案1】:

在 for 循环中首先是在检查该条件后完成增量。因此,当“i”增加到 15 时,它会检查 15

所以,如果你打印“i”,那么它将打印“i”的当前值,即 16

【讨论】:

  • 谢谢。我现在明白了!
【解决方案2】:

i的值从0开始,然后检查是否小于16,最后加1。最后一次迭代,i为15,满足条件小于 15,然后递增。现在,i 是 16,不小于 16,所以 for 循环结束时 i 等于 16。

【讨论】:

    【解决方案3】:

    看,你从 0 开始。逐步完成循环。它将在 i = 0,1,2,3...15 时执行。但现在你看到了,循环执行 0。所以对于任何形式的循环 (int i = 0; i

    【讨论】:

      【解决方案4】:

      循环退出条件是i &lt; num,所以当i >= 16 时代码string = string + "ha"; 没有执行

      【讨论】:

        猜你喜欢
        • 2015-01-10
        • 2016-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多