2012-01-07 95 views
9
  • continue;停止循環,並移動到下一個循環
  • break;停止循環,並移動到循環

年底是不是又有一些種類start;停止循環,並移動到開始的循環?有沒有一個循環「開始」?

我知道通過修改i的值很容易實現所有這三個操作,但我總是試圖尋找已經構建的它的功能。

+0

您可以通過只擱櫃檯就像在for循環您可以重置指數爲0,它會重新啓動 – user889030 2017-04-07 09:36:37

回答

10

沒有 - 沒有關鍵字或其他方式來自動執行。

正如您剛纔提到的,您可以在循環中修改循環條件變量。如果它是一個簡單的i計數器,很容易,但當然你可能有更多的初始化工作,而不僅僅是一個簡單的計數器。

或者你也可以做類似如下:

restartLoop: 
while (true) { 
    for (var i=0, j=100000, x="test"; i < 1000; i++, j--, x+= ".") { 
     if (/*some condition, want to restart the loop*/) 
      continue restartLoop; 
    } 
    break; 
} 

continue restartLoop將跳回了繼續與while循環,然後立即從一開始就包括所有的啓動for循環的下一次迭代初始化代碼。如果for正常退出while循環後退出break語句。

我真的不建議在一般意義上這樣做,但如果你的循環初始化過程是真的複雜,它可能是值得的,因爲那麼你就不需要再重複這一切的循環中。如果您需要進行更多的初始化,而不是很適合for語句的初始化表達式,那麼您可以輕鬆地將它放在while內的for循環之前,它將全部重新運行...

+1

我不知道JS可以做到這一點。棒極了 – ajax333221 2012-01-07 02:58:12

+0

是的,'continue'和'break'都可以和[label](https://developer.mozilla.org/en/JavaScript/Reference/Statements/label)一起使用,這樣你就可以繼續使用'從內部循環內部打破外部循環(通過儘可能多的嵌套級別)。當然,在我的回答中,我已經濫用了這一點,因爲除了允許重新啓動內部循環外,我的外部循環沒有任何用處,但無論如何還有更嚴重的應用程序,因爲我相信您可以想象。 – nnnnnn 2012-01-07 03:07:29

+0

是否可以標記一個循環的開始,並使用break跳轉到它? (是這種情況,我想我發現了一個有趣的方式來實現我想要的) – ajax333221 2012-01-07 03:12:59

1

continue作品。 break的工作原理是跳過循環體的其餘部分,然後結束循環。函數將不得不以某種方式「倒轉」程序的狀態 - 但不是程序的所有狀態,因爲大概你不想失去你所做的 - 無論是循環開始時的位置,這不是我見過的任何編程語言所提供的。

+1

重啓循環,我懷疑的數據將會丟失,如果循環有些循環後從0開始,你分配-1的值,它將再次開始循環。我經常使用它。 – ajax333221 2012-01-07 02:49:21

+0

是的 - 但要自動執行此操作,語言需要知道循環變量是哪一個。 – 2012-01-07 15:08:26

7

將您的循環變量的值重置爲初始值,然後調用continue就可以了。

例如:

for(var i=0; i<20; i++) { 
    if(somecondition) { 
    i=-1; continue; 
    } 
} 
+4

我相信'i = -1'更適合(我可能是錯的),它取決於'continue'是否阻止'i ++'(我不知道) – ajax333221 2012-01-07 02:55:21

+0

@ ajax333221是正確的。在重新評估條件之前,'continue'肯定跳轉到更新表達式。 – nnnnnn 2012-01-07 02:58:10

+0

沒有必要測試,[doco](https://developer.mozilla.org/en/JavaScript/Reference/Statements/continue#Description)如此明確地表示... – nnnnnn 2012-01-07 03:10:23

1

你可以有循環在遞歸調用自身的函數:

function loopIt(numTimes) { 
      if (numTimes < 3) { 
       for (x = 0; x < 20; x++) { 
        if (x == 5) { 
         loopIt(numTimes+1); 
         break; 
        } 
       } 
      }  
     } 

可以明顯改變的條件,以適應你的邏輯,上面是一個簡單的例子。

4

如果你想避免跳轉或goto語句的等價物,我們許多人已經被訓練避免,你可以使用循環的本地函數和返回值的測試來查看是否應該調用它再次:

function doItAll() { 
    // put state variables other than the actual loop control here 

    function doTheLoop() { 
     for(var i=0; i<20; i++) { 
      if (somecondition) { 
       return(true); // run the loop again 
      } 
     } 
     return(false); // done running the loop 
    } 
    while (doTheLoop()) {} 
    // do some things after the loop 
} 
+0

非常好的建議 – ajax333221 2012-01-07 06:09:26

+0

這是一個很好的解決方案。然而,你可以通過將同時和同時放入同一個功能來美化和增強它。 – Bitterblue 2016-06-10 10:05:38

相關問題