Как мне прервать вспомогательный цикл for, не нарушая основной цикл for в javascript?

#javascript

#javascript

Вопрос:

У меня есть цикл for, и внутри этого цикла for у меня есть другой цикл for с условием для разрыва. Проблема в том, что когда вспомогательный цикл for прерывается, цикл верхнего уровня также делает это. Итак, как мне прервать вспомогательный цикл for, не нарушая основной цикл for в javascript?

Комментарии:

1. Javascript не приводит к разрыву внешних циклов при разрывах внутренних циклов. Если ваш код делает это, значит, происходит что-то еще.

Ответ №1:

Используйте оператор break, таким образом:

 var i, j, s = "";

for(i = 0; i < 5;   i) {
    s  = "ni = "   i;
    for(j = 0; j < 999;   j) {
        s  = "nj = "   j;
        if(j === 1) {
            break;
        }
    }    
}
  

Обратите внимание, что в конце s содержится результат пяти итераций всего цикла, а не одной.

Одной из возможных причин вашей проблемы может быть лишняя неуместная точка с запятой, таким образом:

 var i, j, s;
s = "";
for(i = 0; i < 5;   i) {
    s  = "ni = "   i;
    for(j = 0; j < 10;   j); {
        s  = "nj = "   j;
        if(j === 10) {
            break;
        }
    }    
}
  

В приведенном выше случае внутренний цикл for фактически пуст, но отступ делает его похожим на то, что он содержит следующий блок (который на самом деле является непосредственным дочерним элементом «внешнего» цикла). Это означает, что кажущийся «внешний» цикл прервется на первой итерации.

Другой причиной может быть опечатка, приводящая к неправильному использованию присваивания против равенства, таким образом:

 var i, j, s;
s = "";
for(i = 0; i < 5;   i) {
    s  = "ni = "   i;
    for(j = 0; j < 10;   j) {
        s  = "nj = "   j;
        if(i = 5) {
            break;
        }
    }    
}
  

В этой ситуации, в условии, которое приводит к прерыванию внутреннего цикла, переменной цикла внешнего цикла было присвоено значение, которое приводит к завершению внешнего цикла. Назначение соответствует действительности, поэтому разрыв всегда будет достигнут.

Еще одной причиной может быть неправильное понимание области видимости переменной в javascript. На других языках вы могли бы сделать что-то вроде этого:

 var i, s = "";
for(i = 0; i < 5;   i) {
    s  = "nouter = "   i;
    if(true) {
        var i;
        for(i = 0; i < 999;   i) {
            s  = "ninner = "   i;
            if(i === 10) {
                break;
            }
        }
    }    
}
  

Проблема здесь в том, что в javascript переменные ограничены функцией, в которой они объявлены с помощью var . (или глобальный, если вне функции или используется без var ). Это означает, что i внутренний цикл фактически такой же i , как и внешний цикл