为什么继续;语句冻结浏览器

Why does continue; statement freeze browser?

本文关键字:冻结 浏览器 语句 继续 为什么      更新时间:2023-09-26

我正在制作一个小脚本,它将迭代数字并跳过数字5。我想用continue;语句/标签来实现这一点。

这是我的代码:

<p id="test"></p>
<script>
var i, text;
text = "";
i = 0;
for (;i<8;) {
    if (i === 5) {continue;} 
    text += "The number is " + i + "<br>";
    i++;
}
document.getElementById('test').innerHTML = text;
</script>

我没有看到任何打字错误,但编码已经超过12个小时了,也许我在监督一些显而易见的事情。如果是,我道歉。

当我想使用break;语句在数字5处停止时,这就起作用了。

<p id="test"></p>
<script>
var i, text;
i = 0;
text = "";
for (;i<8;) {
    if (i === 5) {break;}
    text += "The number is " + i "<br>";
    i++;
}
document.getElementById('test').innerHTML = text;
</script>
if (i === 5) {continue;}

将永远不允许控制继续进行并且递增CCD_ 3。因此,当i变为5时,它总是会返回。

解决方案:

if (i === 5) {
    i++; // Increament `i` first
    continue;
}

OR,使用for第三个参数。

for (; i<8; i++) {
            ^^^    // Increment `i` for each iteration

使用CCD_ 6条件可以做另一件简单的事情。

for (; i < 8; i++) {
    // If i is not 5, then only append to the string.
    if (i !== 5) {
        text += "The number is " + i + "<br>";
    }
}

这会导致一个无限循环,因为您的值永远不会递增。continue将进入下一次迭代,但是由于您还没有定义一个语句来增加您的值,所以这种情况永远不会发生。

考虑如下重构循环,而不是在循环体中执行增量:

<script> 
    var text = "";
    // This is the most common approach to defining a for-loop as it handles defining
    // your iterator, defining a stop condition and handles how to increment your value
    // after each iteration
    for (var i = 0; i < 8; i++) {
        if (i === 5) {break;}
        text += "The number is " + i "<br>";
    }
    document.getElementById('test').innerHTML = text; 
</script>
if (i === 5) {continue;} 

i为5时,它再也没有机会到达i++。因此,i将永远是5,并且您永远不会退出循环。