如何在不破坏javascript主循环的情况下打破子循环?

时间:2011-11-09 07:30:32

标签: javascript

我有一个for循环,在for循环中我有另一个for循环,有一个break的条件。问题是当sub for循环中断顶级循环时也会这样做。那么如何在不破坏javascript主循环的情况下打破子循环?

1 个答案:

答案 0 :(得分:1)

使用break语句,因此:

var i, j, s = "";

for(i = 0; i < 5; ++i) {
    s += "\ni = " + i;
    for(j = 0; j < 999; ++j) {
        s += "\nj = " + j;
        if(j === 1) {
            break;
        }
    }    
}

请注意,最后,s包含整个循环的五次迭代的结果,而不是一次。

您的问题的一个可能原因可能是额外错误的分号,因此:

var i, j, s;
s = "";
for(i = 0; i < 5; ++i) {
    s += "\ni = " + i;
    for(j = 0; j < 10; ++j); {
        s += "\nj = " + j;
        if(j === 10) {
            break;
        }
    }    
}

在上面的例子中,内部for循环实际上是空的,但是缩进使它看起来好像包含下面的块(实际上是“外部”循环的直接子节点)。这意味着明显的“外部”循环将在第一次迭代时中断。

另一个原因可能是导致错误使用赋值与平等的拼写错误,因此:

var i, j, s;
s = "";
for(i = 0; i < 5; ++i) {
    s += "\ni = " + i;
    for(j = 0; j < 10; ++j) {
        s += "\nj = " + j;
        if(i = 5) {
            break;
        }
    }    
}

在这种情况下,在导致内部循环中断的情况下,外部循环的循环变量已分配一个值,该值导致外部循环完成。分配是真的,所以中断总会被击中。

另一个原因可能是对javascript中变量范围的误解。在其他语言中,您可以执行以下操作:

var i, s = "";
for(i = 0; i < 5; ++i) {
    s += "\nouter = " + i;
    if(true) {
        var i;
        for(i = 0; i < 999; ++i) {
            s += "\ninner = " + i;
            if(i === 10) {
                break;
            }
        }
    }    
}

这里遇到的麻烦是,在javascript中,变量的作用域是用var声明它们的函数。 (或全局,如果在函数之外或在没有var的情况下使用)。这意味着内循环的i实际上与外循环i相同