在while循环中使用Javascript的continue语句会导致无限循环。

4
我正在尝试创建一个带有continue语句的while循环。然而,它似乎导致了无限循环,我无法弄清楚原因。
下面的代码看起来应该从3开始,使用var tasksToDo,递减到0,在途中跳过数字2。
var tasksToDo = 3
while (tasksToDo > 0) {
    if (tasksToDo == 2) {
        continue;
    }
    console.log('there are ' + tasksToDo + ' tasks');
    tasksToDo--;
}
7个回答

3
< p > continue 语句将返回到 while 循环中。tasksToDo 不会进一步减少超过2。

var tasksToDo = 3
while (tasksToDo > 0) {
if (tasksToDo == 2) {
 tasksToDo--;             // Should be here too.
 continue;
}

console.log('there are ' + tasksToDo + ' tasks');
tasksToDo--;
}

1

continue会导致循环跳过减少计数并重新开始。一旦 tasksToDo 达到2,它就会永远保持为2。


0

"continue;"语句可以防止代码块中所有剩余的声明被执行。

因此,在循环达到"i == 2"之后,"tasksDo--"减量不再执行。

这会导致无限循环!

请改用"for"循环。

针对此情况的"for"循环解决方案

var tasksToDo;

for (tasksToDo = 3; tasksToDo > 0; tasksToDo--){
    if (tasksToDo == 2) { continue; }
    console.log('there are ' + tasksToDo + ' tasks');
}

(for 循环接受递减作为其第三个语句!)


1
你还应该建议通过反转代码的某些行来解决此问题。 - AngYC

0

我不太清楚你在做什么,但从我的理解来看,你正在尝试避免在tasksToDo = 2的while循环中执行逻辑。

var tasksToDo = 3
while (tasksToDo > 0) {
    if (tasksToDo != 2) {
        console.log('there are ' + tasksToDo + ' tasks');
    }
    tasksToDo--;
}

如果tasksToDo = 2,添加一个break语句是没有意义的,因为将该条件添加到while (tasksToDo > 2)中会更容易。

这里的代码可能与您的实际代码完全不同,所以我可能会漏掉一些东西。


0

应该是这样吗?

var tasksToDo = 3
while (tasksToDo > 0) {
if (tasksToDo == 2) {
 continue;
 console.log('there are ' + tasksToDo + ' tasks');
 }
tasksToDo--;
}

是的,这就是我要处理的代码,但是多亏了上面一些答案,我想我知道发生了什么。 - moonshineOutlaw

0

continue 会让你回到循环的开头。你可能想要使用 break

或者在 if 块之前进行减量操作。


0

你正在使用continue;,它将使你的循环永远继续下去 用break;代替continue;来退出循环


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接