выход из JavaScript для цикла без возврата

У меня есть цикл, который я хочу выйти, как это:

<code>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();
}
</code>

Проблема в том, что после// Do some work here. операторы выполняются, я хочу выйти из цикла for, но все еще хочу выполнить код ниже всего цикла for (все ниже// Execute the following code after breaking out of the for loop above.).

return false оператор действительно выходит из цикла for, но он также выходит из всей функции. Как это исправить?

 cliffs of insanity06 мая 2012 г., 17:08
Это то, что вы узнаете в первых главах базового учебника по JavaScript. Вы можете рассмотреть что-то вродеeloquentjavascript.net для того, чтобы выучить основы языка. этоsecond chapter учитbreak заявление.
 Felix Kling06 мая 2012 г., 16:56
возможный дубликатHow to stop a for loop?

Ответы на вопрос(6)

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(); 
} 

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ограничение объема переменных, вводимых внутри функции и т. д.). Но это стоит предложить в качестве решения, потому что это ценный метод, который нужно изучить, если не обязательно использовать в данном конкретном случае, то, безусловно, в будущем.

 frenchie06 мая 2012 г., 19:57
хорошо спасибо. Моя философия заключается в том, чтобы сделать мой код простым, чтобы его было легче поддерживать в будущем. Голосование на случай, если другие захотят пойти по этому пути.
 06 мая 2012 г., 20:32
@frenchie - ты абсолютно прав; это определенно лучшая философия.break правильный ответ в этом случае. Замыкания очень мощные и имеют много применений (большая часть кода JQuery построена на них), но этот случай слишком тривиален, чтобы использовать его.
 29 авг. 2018 г., 10:09
Этот макет неbreak for петля на всех.
Решение Вопроса
 06 мая 2012 г., 16:55
почему вы ссылаетесь на пример C #?
 06 мая 2012 г., 16:59
@ilanco: потому что я читаю слишком быстро.
 06 мая 2012 г., 16:55
И ссылка для JavaScript:w3schools.com/js/js_break.asp
 frenchie06 мая 2012 г., 16:55
Ах, окккк, спасибо за ответ.

способом?

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

   if (data[i]===true) {
   //do stuff
   i=SomeCondition;
   }
}

Продолжить - пропускает шаг в цикле. Поэтому он пропускает код ниже продолжить;

возможно, это старая тема, но после прочтения всех ответов мне интересно, почему никто не предложил использовать цикл while?

Я предполагаю, что в JavaScript вы можете разорвать цикл for (что вы не можете сделать во многих других языках, или это считается плохой практикой), но я все равно использовал бы для циклов только для ситуаций, когда вы хотите повторить цикл фиксированное количество раз.

Это было бы мое предложение:

function MyFunction() {

  var i = 0,
      breakLoop = false;

  while (i < SomeCondition && !breakLoop) {

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

     i++;

  }

  SomeOtherFunction();
  SomeOtherFunction2();

}

Ваш ответ на вопрос