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

时间:2016-05-17 14:52:56

标签: javascript loops iteration

我正在编写一个小脚本来迭代数字并跳过数字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>

3 个答案:

答案 0 :(得分:6)

if (i === 5) {continue;}

永远不会允许控件继续并增加i。因此,当i变为五时,它总是会回来。

<强>解决方案:

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

OR,使用for第三个参数。

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

使用if条件可以做一件简单的事情。

for (; i < 8; i++) {

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

答案 1 :(得分:1)

这会导致无限循环,因为您的值永远不会增加。 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>

答案 2 :(得分:1)

if (i === 5) {continue;} 

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