我试图找到一种比这种方式更好地打破嵌套循环的方法
var found = false;
for(x=0; x<10; x++){
for(i=0; i<10; i++){
if(i===3){found =true; break;}; //break inner loop
};//end of inner loop (i)
if(found){break;}; // break outer loop
};//end of outer loop for(x)
然后我找到答案here建议使用标签来避免更多的中断和像这样的布尔
//var found = false; // - using labels we saved this Boolean
exitlabel:
for(x=0; x<10; x++){
for(i=0; i<10; i++){
if(i===3){break exitlabel;}; //jump to the label
};//end of inner loop (i)
//if(found){break;}; // - using labels we SAVED this if statement
};//end of outer loop for(x)
但问题是我不能在<2>循环之后标签退出它们。当我这样做时,浏览器告诉我它无法找到标签! 像这样:
for(x=0; x<10; x++){
for(i=0; i<10; i++){
if(i===3){break exitlabel;};
};
};
exitlabel: // ERROR
并且在循环之前对齐标签将使循环从头开始再次执行,除非我在标签之后和循环之前使用if语句和布尔值来绕过2个循环,使用类似这样的东西
var found = false;
exitlabel:
if(!found){
for(x=0; x<10; x++){
for(i=0; i<10; i++){
if(i===3){found =true; break exitlabel;};
};//end of inner loop (i)
};//end of outer loop for(x)
};// end of if statement
是否是一种保存布尔值的方法,并避免将我的循环包装在这样的IF语句中,只是将标签放在像C语言这样的2循环之后?
如果这是一个愚蠢的问题,请考虑我是非常新手,谢谢。
答案 0 :(得分:2)
有没有办法在所有嵌套循环之后放置一个标签,以便一步完成它们?
通过使用break
语句,您可以打破外部循环。它不需要追求。这使得它在您使用break exitlable
时立即停止。
一个简单的测试就证明了这一点。
exitlabel:
for (x = 0; x < 10; x++) {
for (i = 0; i < 10; i++) {
document.querySelector("pre").textContent += " " + i
if (i === 3) {
break exitlabel;
}
}
}
document.querySelector("pre").textContent += " after loop";
<pre></pre>
并在循环之前对齐标签将使循环从头开始执行
那不是真的。通过使用break
并引用附加到外部for
语句的标签,您告诉该循环停止。它并没有告诉它从一开始就重新启动。
您所描述的内容听起来更像goto
,JavaScript不支持。