0

我的代码大致如下所示:

START  
Recursive method A  
    print("Before Loop")  
    loop:  
    for(Object o: list)  
    {  
          print("Outer loop top")  
       for(Object ob: list2)   
       {  
                 print("Inner loop top")  
          //do stuff with o & ob e.g. recursively call method A under certain conditions  
          if(someCondition true)  
          {  
              print("Entered")  
            break loop;  
          }  
                 print("Inner loop bottom")  
        }   
          print("Outer loop bottom")  
    }  

print("After Loop")  

END  

当程序进入 someCondition 为 true 的 if 语句时,它会打印

Entered  

然后它似乎成功地从两个 for 循环中中断,因为它接下来打印

After Loop  

接着!!在控制台中打印

inner loop bottom  
Outer Loop bottom  
Outer loop top  
inner loop top  
etc.  

这怎么可能。方法 A 从超过 1 个地方递归调用,但是,如果下一次打印“内循环底部”的原因,因为该方法再次递归启动,它不会首先打印“内循环底部”!但是会打印“Before loop”,然后是“Outer loop top”,然后是“Inner loop top”,然后是“inner loop bottom”。根据打印语句,它从两个循环中中断,然后跳回到内循环的底部并继续循环通过内循环。到底是怎么回事。请帮忙!谢谢

4

1 回答 1

0

使用不带标签的 break 会中断当前正在执行的最内层循环。

使用带有标签 foo 的 break 会中断标签为 foo 的语句。

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

break 语句包含一个可选标签,允许程序跳出带标签的语句。break 语句需要嵌套在这个带标签的语句中。带标签的语句可以是任何块语句;它不必以循环语句开头。

学分:javascript中带标签和不带标签之间的区别是什么

于 2013-04-03T12:40:04.530 回答