我试了一下:

for(i = 0; i < 5; i++){
    for(j = i + 1; j < 5; j++){
        break(2);
    }
    alert(1);
}

结果却得到:

SyntaxError:缺失;在声明中

那么,如何在JavaScript中打破嵌套循环呢?


当前回答

返回“break”你嵌套的for循环。

function foo ()
{
    //dance:
    for(var k = 0; k < 4; k++){
        for(var m = 0; m < 4; m++){
            if(m == 2){
                //break dance;
                return;
            }
        }
    }
}
foo();

其他回答

在我看来,将构造词汇量保持在最小是很重要的。如果我能轻易地放弃休息并继续下去,我就这么做。

function foo ()
{
    var found = false;
    for(var k = 0; (k < 4 && !found); k++){
        for(var m = 0; (m < 4 && !found); m++){
           if( m === 2){
               found = true;
           }
        }
    }
    return found;
}

注意,在循环之后,m和k比你想象的要大。这是因为m++和k++在它们的循环条件之前执行。然而,这仍然比“肮脏的”休息要好。

编辑:长评论@丹尼斯…

我并不是百分百地认真对待“肮脏”,但我仍然认为“打破”违背了我自己对干净代码的概念。一想到多层次的休息,我就想冲个澡。

我发现我对代码的感觉是正确的,因为我写过所有的生命。我能想到的最好的原因是礼仪和语法的结合。休息是不礼貌的。多层休息是非常粗鲁的。

在查看for语句时,读者确切地知道在哪里查找。你需要知道的关于交战规则的一切都在合同里,在括号里。作为一个读者,休息侮辱了我,感觉我被欺骗了。

明说比欺骗更值得尊敬。

至少有五种不同的方法可以打破两个或多个循环:

1)设置父循环到结束

for (i = 0; i < 5; i++)
{
    for (j = 0; j < 5; j++)
    {
        if (j === 2)
        {
            i = 5;
            break;
        }
    }
}

2)使用标签

fast:
for (i = 0; i < 5; i++)
{
    for (j = 0; j < 5; j++)
    {
        if (j === 2)
            break fast;
    }
}

3)使用变量

var exit_loops = false;
for (i = 0; i < 5; i++)
{
    for (j = 0; j < 5; j++)
    {
        if (j === 2)
        {
            exit_loops = true;
            break;
        }
    }
    if (exit_loops)
        break;
}

4)使用自执行功能

(function()
{
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
             if (j === 2)
                 return;
        }
    }
})();

5)使用常规功能

function nested_loops()
{
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
             if (j === 2)
                 return;
        }
    }
}
nested_loops();

Break不带参数。有两种变通方法:

将它们包装在一个函数中并调用return 在内部循环中设置一个标志,如果设置了标志,则在循环结束后再次中断。

在多级循环中使用function -这是一个好方法:

function find_dup () {
    for (;;) {
        for(;;) {
            if (done) return;
        }
    }
}

你应该能够打破一个标签,像这样:

function foo () {
    dance:
    for (var k = 0; k < 4; k++) {
        for (var m = 0; m < 4; m++) {
            if (m == 2) {
                break dance;
            }
        }
    }
}