2013-04-03 133 views
0

我有代碼大致是這樣的:break語句不工作

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 

當程序進入if語句,其中someCondition是真實的它打印

Entered 

,然後它似乎打破從這兩個for循環成功,因爲它下次打印

After Loop 

然後!在控制檯打印

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

這怎麼可能。方法A從多於一個地方遞歸地調用,但是,如果因爲該方法以遞歸方式再次開始而下一次打印「內部循環底部」的原因,則它不會首先打印「內部循環底部」!但是「Before loop」和「Outer loop top」,然後會打印「Inner loop top」和THEN「inner loop bottom」。根據打印語句,它從兩個循環中斷開,然後跳回到內循環的底部,並繼續在內循環中循環。到底是怎麼回事。請幫忙!謝謝

回答

0

使用沒有標籤的break會破壞當前正在執行的最內層循環。

使用帶有標籤foo的break會打破標有foo的語句。

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

break語句包括一個可選的標籤,允許在程序打出來的標記聲明。 break語句需要嵌套在這個標籤語句中。帶標籤的語句可以是任何塊語句;它不必以循環語句開頭。

Credits:what the difference between break with label and without label in javascript

+0

感謝您的回覆。好吧,我的break語句嵌套在標籤語句中,很明顯,通過打破外部循環我也打破了內部循環,所以你提出的是錯誤的?我試過使用沒有標籤的break語句從內部循環中斷開,然後使用someCondition = true變量從外部循環中斷開。並打印出「After loop」,這意味着它的工作,但它然後再次打印「內循環底部」。 :/ – user2240342

+0

那麼這似乎有點依賴於機器..因爲在我的電腦相同的程序給出了類似的,但在其他順序輸出..嘗試更換標籤的位置或打破沒有標籤。但是,恐怕沒有標籤的打破只會導致內循環突破。類似的事情可以在外部循環完成.. –

+0

我試過了,(請參閱我以前的評論),它以相同的方式響應:/ – user2240342