javascript中带标签的break和不带标签的break有什么区别

问题描述 投票:0回答:6

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);

javascript break labeled-statements
6个回答
21
投票

在没有标签的情况下使用时,break只会中断当前循环,在您的情况下是最里面的for。所以现在 j = 6,条件现在是错误的,并且循环继续进行 40 个增量。

当你放置标签时,break转到标签的“级别”,因此两个for循环被跳过。


5
投票

使用不带标签的

break
会破坏当前正在执行的最内层循环。

break
与标签
foo
一起使用会破坏标记为 foo
语句

MDN

break
文档

break
语句包含一个可选标签,允许程序跳出带标签的语句。
break
语句需要嵌套在此标记语句中。带标签的语句可以是任何block语句;它前面不必有循环语句。


4
投票

如果没有标签,

break
将脱离内循环。使用标签,您可以停止嵌套循环的执行。

参见示例:

https://developer.mozilla.org/en/JavaScript/Reference/Statements/label


1
投票

第一个只是打破你的“j”循环。中断后,它返回到“i”循环,并将“i”递增到 6。一旦“i”为 6,它返回到“j”循环,并且不再满足 if 条件。所以它继续加“num”。


1
投票

仅在内部 for 循环中给出中断。 因此,当 i = j = 5 时,它仅中断内部 for 循环。 但外循环继续旋转10次。 因此,当 i=j=5 时,循环将仅旋转 5 次,而在其余所有情况下,它将旋转 10 次。


1
投票

当您使用不带标签的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

© www.soinside.com 2019 - 2024. All rights reserved.