(JavaScript) 为啥 while 循环中的“if”中的 continue 语句会使浏览器崩溃?

Posted

技术标签:

【中文标题】(JavaScript) 为啥 while 循环中的“if”中的 continue 语句会使浏览器崩溃?【英文标题】:(JavaScript) Why does a continue statement inside 'if' in a while loop crash the browser?(JavaScript) 为什么 while 循环中的“if”中的 continue 语句会使浏览器崩溃? 【发布时间】:2021-05-18 02:55:27 【问题描述】:

我想用 javascript 编写一个程序来打印除 5 和 10 之外的从 1 到 20 的所有数字。当我使用这样的 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++;

它使网页无响应,并提示我关闭它。这里有什么问题?

【问题讨论】:

【参考方案1】:

问题如下,在 for-loopcontinue 会跳回到更新表达式 x++ 但在 while 循环中它会跳回到运行状态while(x

引用mdn docs。

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

因为您没有更新条件内的计数器

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

x 将保持 5 并且永远不会更新,因为在 while 循环中继续它会跳回 运行条件。这将进入一个无限循环

要解决这个问题,您可以在 while-loop

中的 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++;

【讨论】:

【参考方案2】:

在第一种情况下,循环声明 for (x = 1; x &lt;= 20; x++) 处理迭代之间递增的 x,因此每次循环体执行时,您都会得到不同的 x 值。

在第二种情况下,x++x 既不是5 也不是10 时执行。因此,当x 到达5 时,循环将永远与x = 5 一起执行,因为没有任何改变。

【讨论】:

以上是关于(JavaScript) 为啥 while 循环中的“if”中的 continue 语句会使浏览器崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

(JavaScript) 为啥 while 循环中的“if”中的 continue 语句会使浏览器崩溃?

为啥在 Javascript 中不鼓励在 while 语句中赋值?

为啥在这个循环中倒计时顺序会发生变化?

为啥'continue'语句忽略'while'循环中的循环计数器增量,而不是'for'循环?

为啥while循环不退出?

为啥while循环的执行速度会随时间变化?