【问题标题】:(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++;
}

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

【问题讨论】:

    标签: javascript html for-loop while-loop


    【解决方案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 一起执行,因为没有任何改变。

      【讨论】:

        猜你喜欢
        • 2015-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 2014-03-10
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        相关资源
        最近更新 更多