47

次のように終了したい for ループがあります。

function MyFunction() {
  for (var i = 0; i < SomeCondition; i++) {
     if (i === SomeOtherCondition) {
        // Do some work here.
        return false;
     }
  }
  // Execute the following code after breaking out of the for loop above.
  SomeOtherFunction();
}

問題は、// Do some work here.ステートメントの実行後、for ループを終了したいが、for ループ全体 (以下のすべて// Execute the following code after breaking out of the for loop above.) の下のコードを実行したいことです。

このreturn falseステートメントは for ループを終了しますが、関数全体も終了します。これを修正するにはどうすればよいですか?

4

6 に答える 6

91

breakあなたは声明を探しています。

于 2012-05-06T14:53:44.033 に答える
12

break または continue ステートメントを使用する

function MyFunction() { 
  for (var i = 0; i < SomeCondition; i++) { 

     if (i === SomeOtherCondition) { 

        // Do some work here 
        break;
     } 
  } 

  SomeOtherFunction(); 
  SomeOtherFunction2(); 
} 

または、状態のアイテムを除いてアイテムを処理し続ける

function MyFunction() { 
  for (var i = 0; i < SomeCondition; i++) { 

     if (i != SomeOtherCondition) continue;

     // Do some work here 
  } 

  SomeOtherFunction(); 
  SomeOtherFunction2(); 
} 
于 2012-05-06T14:57:55.563 に答える
7

何人かの人々がbreak解決策として提案しました、そしてそれは確かに質問への最良の答えです。

ただし、完全を期すために、条件の内容をクロージャ関数でreturnラップすることにより、ステートメントを保持しながら質問に回答できることも追加する必要があると思います。if()

function MyFunction() {

  for (var i = 0; i < SomeCondition; i++) {

     if (i === SomeOtherCondition) {
        function() {
           // Do some work here
           return false;
        }();
     }
  }

  SomeOtherFunction();
  SomeOtherFunction2();
}

私が言うようにbreak、この場合はおそらくより良い解決策です。これは質問に対する直接の答えであり、クロージャはいくつかの追加の要因を導入します(の値の変更、this関数内に導入される変数の範囲の制限など)。しかし、それは解決策として提供する価値があります。なぜなら、この特定の機会に必ずしも使用される必要はないにしても、将来のために確実に使用されることは学ぶ価値のあるテクニックだからです。

于 2012-05-06T17:54:31.407 に答える
4

Break - ループ全体を中断します。続行 - ループ内のステップをスキップします。したがって、以下のコードをスキップして続行します。

于 2012-05-06T14:57:53.247 に答える
1

これは古いトピックかもしれませんが、すべての回答を読んだ後、代わりにwhileループを使用することを誰も提案しなかったのはなぜだろうか?

JavaScript では for ループを破ることができると思います (これは他の多くの言語ではできないか、悪い習慣と見なされます)。回。

これは私の提案です:

function MyFunction() {

  var i = 0,
      breakLoop = false;

  while (i < SomeCondition && !breakLoop) {

     if (i === SomeOtherCondition) {
        breakLoop = true;
     }

     i++;

  }

  SomeOtherFunction();
  SomeOtherFunction2();

}
于 2015-09-10T10:59:36.210 に答える