var num = 0;
for(var i = 0; i < 10; i++){
for(var j = 0; j < 10 ; j++){
if(i == 5 && j == 5){
break;
}
num++;
}
}
console.log(num)
在上面的代码中,我期望结果是 55,但为什么结果是 95。
但是为什么我加了标签,结果就变成了55?
var num = 0;
outermost:
for(var i = 0; i < 10; i++){
for(var j = 0; j < 10 ; j++){
if(i == 5 && j == 5){
break outermost;
}
num++;
}
}
console.log(num);
在没有标签的情况下使用时,break只会中断当前循环,在您的情况下是最里面的for。所以现在 j = 6,条件现在是错误的,并且循环继续进行 40 个增量。
当你放置标签时,break转到标签的“级别”,因此两个for循环被跳过。
如果没有标签,
break
将脱离内循环。使用标签,您可以停止嵌套循环的执行。
参见示例:
https://developer.mozilla.org/en/JavaScript/Reference/Statements/label
第一个只是打破你的“j”循环。中断后,它返回到“i”循环,并将“i”递增到 6。一旦“i”为 6,它返回到“j”循环,并且不再满足 if 条件。所以它继续加“num”。
仅在内部 for 循环中给出中断。 因此,当 i = j = 5 时,它仅中断内部 for 循环。 但外循环继续旋转10次。 因此,当 i=j=5 时,循环将仅旋转 5 次,而在其余所有情况下,它将旋转 10 次。
当您使用不带标签的break时,它只会中断内部循环,即 (i=5 j=6) ,(i=5 j=7) ,(i=5 j=8) ,(i=5 j=9 ) 并再次循环从 (i=6 j=0) 开始到 (i=9 j=9) 并计数 (num ++) 开始,这就是为什么它显示结果为 95。
bt 当您使用带有标签的break(即breakoutermost)时,它会从循环标签中作为outermost(即外循环)中断,这就是为什么6它给出的输出为55