我有一个for循环,在for循环中我有另一个for循环,有一个break的条件。问题是当sub for循环中断顶级循环时也会这样做。那么如何在不破坏javascript主循环的情况下打破子循环?
答案 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
相同