无法理解循环中的“继续”功能是如何工作的? [关闭]

Posted

技术标签:

【中文标题】无法理解循环中的“继续”功能是如何工作的? [关闭]【英文标题】:Why "continue" function in loop throws error when (k+1) is used as k (variable) value? [closed] 【发布时间】:2022-01-21 02:00:08 【问题描述】:

我希望你们做得很好 我正在学习 javascript 我了解了“继续”,我们可以在循环中使用它进行迭代。 但这是我无法得到的

先看一下代码:

let k = 1

do 
  if (k === 9) 
    k++;
    continue;
  
  console.log(k + 1);
  k++;
 while (k < 15);

当console.log 中为(k+1) 时,打印9 并错过10。 不明白为什么?

但是当使用这段代码时

let k = 1

do 
  if (k === 9) 
    k++;
    continue;
  
  console.log(k);
  k++;
 while (k < 15);

console.log 中为 (k) 时,不打印 9,打印 10。

不明白什么时候用simple(k)和什么时候用(k+1)背后的逻辑?

所以这就是我所理解的。如果K=1。控制台.log(k+1)。 2 已打印。然后由于k ++。 k 变为 2 并且条件被测试并且因为它是真的所以它将移动到另一个循环。这种情况还在继续。对吧?

谢谢

【问题讨论】:

k9 时,我认为在这两个示例中,continue 都会遗漏控制台日志。我看到的唯一区别是日志输出的内容 这是大多数语言中的标准循环语法,带有 for 循环。请参阅continue 的文档以了解它的工作原理以及如何使用它。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - 当您看到 continue 时,您会看到一条指示立即 停止并继续进行下一次迭代。循环体中不再有代码运行。 k==9 时会继续过去的记录。因此,如果它记录k+1,它不会记录9+1=10,当它记录k 时,它不会记录9=9 诚然,continue 的名字有点可疑,它通常用于 continue 越过循环;不知道这一点的人很可能会认为这意味着继续循环,但我想这将是多余的,并且与它在这种情况下的含义相反! @Barmar continue 停止执行当前迭代中的语句并继续前进。我不明白的是,在代码 1 中,当 k===9 时,不应该打印 9,它应该向前移动到 10。它就是这样完成的。但是在代码 2 中,打印了 9 但没有打印 10,所以这让我感到困惑,为什么在代码号 1 中没有打印 9 而在代码号 2 中打印了 9。 【参考方案1】:

continue 跳过循环体的其余部分并开始循环的下一次迭代(如果while 条件仍然为真)。

在两个代码 sn-ps 中,您在 k == 9 时执行此操作,因此它会跳过调用 console.log() 的代码。

在第一个版本中,它记录了k+1。所以当k == 9 它跳过打印10

在第二个版本中,它记录了k。所以当k == 9 它跳过打印9

【讨论】:

谢谢 BARMAR 那么 k++ 在 If 语句中做了什么它有什么用呢? k 加 1。您需要在 if 语句中执行此操作,因为您稍后会在循环中跳过 k++。如果你不这样做,那么循环将卡在k == 9【参考方案2】:

这是因为在您的逻辑中,如果 k === 9,您将 +1 添加到 k,然后将其记录到控制台,这使得 9 不可见。你应该记录它,然后添加k++

【讨论】:

如果您在if 之前记录它,您应该如何看到continue 的存在造成的任何差异? @T.Trassoudaine 在“If”之后登录 @BehindTheWebPage 是的,在问题中,但是这个答案建议将日志放在 k++ 之前,这可能位于两个位置:在 if 之前,这意味着您将只记录 k在每次迭代中(ifcontinue 变得无用)或在 if 内部,这意味着您将始终只记录 9。【参考方案3】:

在第一个示例中,您正在记录 k+1 的值,因此,当 k 为 1 时,它记录值 2 (1+1),当 k 为 2 时,它记录值 3 (2+1) all直到 k 为 8 和日志 9 (8+1) 的方式。当 k 为 9 时,k 仍会递增,k+1 为 10,但这不会被记录,因为循环的其余部分被跳过。

在第二个示例中,您执行的操作完全相同,但登录的是 k 而不是 k+1,因此所有记录的值都少 1。

"...你能不能也解释一下console.log(k+1)下的k++"

在这两种情况下,无论是在块的末尾、console.log 之后或if (k === 9) 块内continue 之前的循环,k 的值每次都会增加 1

【讨论】:

感谢您的解释 明白您的意思 但是您也可以在 console.log(k+1) 下解释 k++。正如我所想的,当 k=1 时,它会执行 console.log(k+1) = 2 并打印现在它会执行 console.log 下写的 k++。因此,如果您也可以在 console.log(k+1) 下解释 k++,我将不胜感激。 @BehindTheWebPage k+1 不修改 k 的值,k++ 等价于 k+=1 等价于 k = k + 1。在第二种情况下,您将值 k+1 分配给 k,而在第一种情况下,您只需将 k+1 作为参数提供给console.log @T.Trassoudaine 好的,知道了。那么您能否解释一下( k +1 作为 console.log 的参数)。正如我所想的那样,当 k = 1 声明时。由于( console.log (k+1) ),它被打印为 2。然后我对此感到困惑,同样的事情是由k ++完成的。实际上,我是从 Youtube 上的一个频道中了解到这一点的,而那个人并没有深入解释这一点。所以这就是为什么我提出问题只是为了明确基本概念。 不,k+1 返回值 2,但它不会更改 k 的值,这与 k++ 不同,后者实际上(但不完全)与 k = k + 1 相同 - 查看区别 谢谢。所以这就是我所理解的。如果K=1。控制台.log(k+1)。 2 已打印。然后由于k ++。 k 变为 2 并且条件被测试并且因为它是真的所以它将移动到另一个循环。这种情况还在继续。对吗?

以上是关于无法理解循环中的“继续”功能是如何工作的? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无法理解此 JavaScript 代码来绘制 HTML 画布? [关闭]

PyUSB怎么理解? [关闭]

在 Kotlin 中的功能循环中,如何“中断”或“继续”?

为啥它会忽略我在 for 循环中的继续? [关闭]

如何使用 itertools 继续使用列表中的值直到矩阵的对角线已满

C++11中的随机数生成:如何生成,它是如何工作的? [关闭]