JavaScript中,为什么在while循环内的if语句中使用continue会导致浏览器崩溃?

4
我希望用JavaScript编写一个程序,打印从1到20的所有数字,但排除5和10。 当我使用for循环时,就像这样:
for (x = 1; x <= 20; x++) {
    if (x == 5 || x == 10) {
        continue;
    }
    document.write(x + ' ');
}

它正常工作,输出1 2 3 4 6 7 8 9 11 12 13 14 15 16 17 18 19 20

然而,当我尝试使用如下的while循环时:

var x = 1;

while (x <= 20) {
    if (x == 5 || x == 10) {
        continue;
    }
    document.write(x + ' ');
    x++;
}

网页无响应,弹出提示要求关闭该页面。这是什么问题?

2个回答

4
问题如下:在for循环中,continue会跳回更新表达式x++,但在while循环中,continue将跳回运行条件while(x <= 20)

参考mdn文档

在while循环中,它会跳回到条件。在for循环中,它会跳到更新表达式。

因为您没有在条件语句中更新计数器。

while (x <= 20) {
    if (x == 5 || x == 10) {
        continue;            
    }

x将保持为5,永远不会更新,因为while循环中的continue语句会跳回到运行条件。这将导致无限循环

要解决此问题,可以在while循环内的continue语句之前递增计数器。

while (x <= 20) {
    if (x == 5 || x == 10) {
        x++
        continue;

// for (x = 1; x <= 20; x++) {
//    if (x == 5 || x == 10) {
//        continue;
//    }
//    document.write(x + ' ');
//}


var x = 1;

while (x <= 20) {
    if (x == 5 || x == 10) {
        x++
        continue;
        
    }
    document.write(x + ' ');
    x++;
}


4
在第一种情况下,循环声明 for (x = 1; x <= 20; x++) 处理在迭代之间递增 x ,因此每次循环体执行时,都会得到不同的 x 值。
在第二种情况下,只有当 x 不是 5 或者 10 时,x++ 才会被执行。因此,当 x 达到 5 后,循环会永远以 x = 5 继续执行,因为没有任何东西在改变它。

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