Ответ 1
Вы ищете инструкцию break
.
У меня есть цикл, который я хочу выйти; например:
function MyFunction() {
for (var i = 0; i < SomeCondition; i++) {
if (i === SomeOtherCondition) {
// Do some work here
return false;
}
}
SomeOtherFunction();
SomeOtherFunction2();
}
Проблема заключается в том, что после выполнения операторов Do some work here
я хочу выйти из цикла for, но все равно выполнить SomeOtherFunctions();
Возвращаемый false оператор завершает цикл for, но также выходит из всей функции. Как это исправить?
Спасибо.
Вы ищете инструкцию break
.
Использовать оператор 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();
}
Несколько человек предложили 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
, ограничение объема переменные, введенные внутри функции и т.д.). Но это стоит того, чтобы предлагать в качестве решения, потому что это ценная техника для изучения, если не обязательно ее использовать в этом конкретном случае, то, безусловно, в будущем.
Break - разбивает весь цикл. Продолжить - пропустить шаг в цикле. Поэтому он пропускает код ниже,
Будет ли хороший параметр переменной я соответствовать значению somecondition?
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();
}