【问题标题】:What's going on in this do while loop with break?带break的这个do while循环发生了什么?
【发布时间】:2019-06-01 21:54:54
【问题描述】:

我试图了解这个带有break 语句的 do/while 循环是如何工作的。我认为无论何时执行 break 语句(前两次迭代,因为 if 条件在那些时间为真,但不是第三次),for 循环被转义,因此 n 不会增加。但是行console.log(`n is ${n}`)记录n is 2n is 2n is 5——它是如何从2跳到5的?我以为第三次会是 3(当 if 条件不成立时,因为 quot6060 % 2 确实等于 0,因此 break 语句没有被执行)。

  // newArray = [5, 4, 3, 2, 1];

  var quot = 0;
  var loop = 1;
  var n;

  do {
        quot = newArr[0] * loop * newArr[1];
        for (n = 2; n < newArr.length; n++) {
          if (quot % newArr[n] !== 0) {
            break;
          }
        }

        console.log(`n is ${n}`)

        loop++;
   } while (n !== newArr.length);

这是完整代码(freeCodeCamp challenge 的解决方案):

function smallestCommons(arr) {
  // Sort array from greater to lowest
  // This line of code was from Adam Doyle (http://github.com/Adoyle2014)
  arr.sort(function(a, b) {
    return b - a;
  });

  // Create new array and add all values from greater to smaller from the
  // original array.
  var newArr = [];
  for (var i = arr[0]; i >= arr[1]; i--) {
    newArr.push(i);
  }

  // Variables needed declared outside the loops.
  var quot = 0;
  var loop = 1;
  var n;

  // Run code while n is not the same as the array length.
  do {
    quot = newArr[0] * loop * newArr[1];
    for (n = 2; n < newArr.length; n++) {
      if (quot % newArr[n] !== 0) {
        break;
      }
    }

    console.log(`n is ${n}`)

    loop++;
  } while (n !== newArr.length);

  return quot;
}

// test here
smallestCommons([1,5]);

【问题讨论】:

  • 您在for 循环中没有日志语句,因此for 循环可能会将n 从2 增加到5(或更多),而不会记录任何中间数字
  • 要将反引号放在代码块中,请使用双反引号作为代码块分隔符,而不是单个反引号

标签: javascript loops break


【解决方案1】:

你的数组长度是 5,所以如果你的 if 语句和 break 没有被执行,那么 n 永远是 5。

(n = 2; n

最后一次执行,n=4, n &lt; newArr.length (which is 5), n++ (now n is 5)

就像您在问题中所说的“if 条件不正确,因为 quot 是 60 并且 60 % 2 确实等于 0,因此不执行 break 语句”

您的 break 语句只会让您尽早退出 for 循环,如果您的 for 循环完成它的整个循环,那么 n 将始终为 5。

希望这是有道理的!

【讨论】:

  • 谢谢,这有帮助。它仍然让我感到困惑,最后我知道跳转的原因是,因为在第三次迭代中,如果为 false,解释器会停留在 for 循环中直到它完成,然后才会到达 n 的控制台日志。
猜你喜欢
  • 2013-01-19
  • 2016-05-26
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多