2010-02-10 112 views
4

那麼這實際上是否將循環命名爲nextLoop?所以當它說continue nextLoop時,它是否回到頂部馬上?關於循環的問題並繼續

var total = 0; 
     nextLoop: 
     for (var i = 0; i < 7; ++i) { 
      for (var j = 0; j < 6 ; ++j) { 
       if (i < 5) 
       continue nextLoop; 
       total++; 
       } 
      total++; 
     } 
    total++; 
    document.write(total); 

編輯:

是這樣命名的循環nextLoop:?如果是這樣,你還能說出什麼名字?任何提及爲什麼命名的東西都可能有用?

+0

我從來不知道如何回答這樣的問題。答案是「是的,你完全正確」,但這似乎不值得一個職位。 – 2010-02-10 16:53:39

+0

更新我的答案以回答您的修改。 – 2010-02-10 17:30:17

回答

8

是的。當你有一個嵌套在另一個循環內的循環,並且你想要繼續循環時,這非常有用。 Here's a page on MDC關於它。因此,在你的情況下,在i = 2循環中,如果從j循環中,你說continue nextLoop,它將跳出j循環,執行i增量,並繼續使用i = 3

使用continue與標籤不是通常良好做法;它可以表明邏輯需要被重構。但是它在語法上是完全有效的,我希望有人會以一種他們認爲絕對必要的示例情況作爲參考。

編輯回答您的編輯,循環的標籤(名稱)是nextLoop(沒有冒號):你可以標記語句,然後使用這些標籤作爲continuebreak目標。詳情請查看the spec。典型的用法是標記循環,如continuebreak他們,但請注意,break也適用於嵌套switch語句 - 您可以將它們標記爲循環,並將其標記爲內部的一個案例中的外部循環。你甚至可以混合它們,這樣你就可以在交換機中打破一個循環(標籤命名空間對兩者都是通用的)。

+1

我認爲你無論如何都可以沒有它。 – anthares 2010-02-10 16:59:03

+0

感謝您提供有用的參考資料,說明它爲何有用! – Strawberry 2010-02-10 17:02:40

1

它的確如此。但你應該避免它。這是一種不好的做法,類似於go to。使代碼難以閱讀,理解和意大利麪條喜歡。

1

是的,那是預期的行爲。看看here

0

其他語言讓你突破選定數量的內部循環, if(!x)break 2;將在兩個階段繼續進行。

我已經看到複雜的循環與多個循環標籤, 並繼續調用到一個特定的標籤,但我同意它可以混淆邏輯。

你幾乎總是可以通過寫它沒有繼續提高循環效率:

var total= 0; 
nextLoop: 
for (var i = 0; i < 7; ++i){ 
    for (var j = 0; j < 6 ; ++j){ 
     if(i>4) total++; 
    } 
    total++; 
} 

total++;