无法理解循环中的“继续”功能是如何工作的? [关闭]
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 并且条件被测试并且因为它是真的所以它将移动到另一个循环。这种情况还在继续。对吧?
谢谢
【问题讨论】:
当k
是9
时,我认为在这两个示例中,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
在每次迭代中(if
和 continue
变得无用)或在 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++,我将不胜感激。 @BehindTheWebPagek+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 画布? [关闭]