For - это оператор в JavaScript для создания цикла, который состоит из трёх необязательных условий. Цикл for считается более сложным чем while, но тем не менее более распространен.
for
for (начальное выражение; условие; шаг) {
// инструкция (тело цикла)
}
Начальное выражение - условие выполняется один раз при входе в цикл и обычно используется для инициализации счетчика.
Условие - проверяется при каждой итерации. Если условие true происходит запуск цикла, при false остановка.
Тело цикла - код из тела цикла выполняется при каждой итерации до тех пор пока условие true.
Шаг - выражение выполняется после исполнения кода из тела цикла при каждой итерации перед проверкой условия.
for (let n = 0; n < 5; n++) {
console.log(n);
}
let n = 0 - выполняется один раз при входе в цикл, переменной n задается значение 0.
n < 5 - далее проверяется условие, где n должно быть меньше 5, если это true, тогда поток выполнения кода идет дальше.
console.log(n) - после каждой итерации в console выводится значение переменной n, на первом этапе это 0.
n++ - после выполнения тела цикла n увеличивается на единицу.
Далее процесс происходит заново, до тех пор пока n не станет равна 5, тогда цикл завершится. Результатом скрипта является вывод в console цифр 0, 1, 2, 3, 4.
for (let i = 1, n = 0; i <= 10; i++, n++) {
console.log('Итерация № ' + i + ' = ' + n);
}
В первом выражении цикла for можно объявить несколько переменных, в этом примере это i и n, но их может быть и больше. В третьем выражении ситуация сходная с каждым шагом i и n увеличиваются на единицу, при необходимости можно добавить операции и над другими переменными.
forВсе три выражения в цикле for расположенные в круглых скобках необязательны и могут быть пропущены.
let n = 0;
for (; n <= 10; n++) {
console.log(n);
}
Такой код отработает идентично, тому, где переменная n была бы объявлена в первом выражении for, а не перед циклом.
let n = 0;
for (; n <= 10; ) {
console.log(n++);
}
В этом случае шаг был перенесен в тело цикла.
let n = 0;
for (; ; ) {
console.log(n++);
}
Здесь отсутствуют все три выражения и это тоже не ошибка, правда это делает цикл бесконечным. В таком случае можно предусмотреть окончание цикла с помощью директивы break.
breakДиректива break позволяет прервать цикл for в любой момент
let n = 0;
for (; ; ) {
console.log(n++);
if (n > 10) break;
}
При каждой итерации в теле цикла происходит проверка if (n > 10) и когда n станет больше 10, цикл прервется.
for (var n = 0; n < 8; n++) {
if (n === 5) break;
}
alert(n);
Здесь более наглядно можно увидеть принцип работы break. Как только n достигнет пяти, цикл прервется и в модальном окне появится результат. В свою очередь условие n < 8 будет проигнорировано.
continueДиректива continue применяется в том случае, если необходимо прервать не весь цикл, а одну или более итераций.
for (let n = 0; n < 10; n++) {
if (n % 2 == 0) continue;
alert(n);
}
Данный скрипт будет выводить по порядку в модальном окне только нечетные числа, когда попадается четное число, срабатывает continue, который завершает данную итерацию.
continue и breakПри вложенности циклов директивы continue и break, могут не помочь решить нужную задачу, в этом случае на помощь приходят метки. Допустим необходимо при определенных условиях выйти из всех уровней цикла.
let n, i;
cancelLoops: for (n = 0; n < 4; n++) {
for (i = 0; i < 4; i++) {
if (n === 3 && i === 3) {
break cancelLoops;
}
console.log('n = ' + n + ', i = ' + i);
}
}
Метка cancelLoops обозначает верхний цикл и при достижении условия (n === 3 && i === 3) команда break cancelLoops его прерывает
passLoop: for (n = 0; n < 4; n++) {
for (i = 0; i < 4; i++) {
if (n === 2 && i === 2) {
continue passLoop;
}
console.log('n = ' + n + ', i = ' + i);
}
}
При достижении условия (n === 2 && i === 2) команда continue passLoop завершает текущую итерацию и переносит поток выполнения кода в начало верхнего цикла.
Цикл for состоит из трех необязательных выражений и тела цикла. Для того, чтобы прервать исполнение for используется команда break, для окончания итерации continue. При работе с вложенными циклами можно решать задачи с помощью меток, которые работают, как с continue, так и с break.