Вопрос по javascript – выход из JavaScript для цикла без возврата

43

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

<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, но он также выходит из всей функции. Как это исправить?

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

Ваш Ответ

6   ответов
83
почему вы ссылаетесь на пример C #?
@ilanco: потому что я читаю слишком быстро.
И ссылка для JavaScript:w3schools.com/js/js_break.asp
Ах, окккк, спасибо за ответ. frenchie
1

способом?

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

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

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

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

1

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

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

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

function MyFunction() {

  var i = 0,
      breakLoop = false;

  while (i < SomeCondition && !breakLoop) {

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

     i++;

  }

  SomeOtherFunction();
  SomeOtherFunction2();

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

@frenchie - ты абсолютно прав; это определенно лучшая философия.break правильный ответ в этом случае. Замыкания очень мощные и имеют много применений (большая часть кода JQuery построена на них), но этот случай слишком тривиален, чтобы использовать его.
хорошо спасибо. Моя философия заключается в том, чтобы сделать мой код простым, чтобы его было легче поддерживать в будущем. Голосование на случай, если другие захотят пойти по этому пути. frenchie
Этот макет неbreak for петля на всех.

Похожие вопросы