Циклы for и while в JavaScript
Для многократного повторения одинаковых операций используются циклы. Действия повторяются заданное количество раз или до выполнения определенного условия. Для этого используются различные конструкции циклов. Блок выполняемых действий называется телом
цикла.
Цикл for
Циклу for
в круглых скобках передаются 3 аргумента:
- Переменная цикла с начальным значением.
- Условие входа в цикл.
- Действие, выполняемое после каждого прохождения тела цикла.
Аргументы разделяются точкой с запятой
. Все 3 аргумента являются необязательными, но ;
ставить обязательно.;
Работа цикла for
имеет следующий алгоритм:
- Переменной цикла (1) присваивается начальное значение.
- Условие для входа в цикл (2) преобразуется в логический (
булевый
) тип и проверяется. Еслиtrue
, тогда выполняются действия в теле цикла. Еслиfalse
, тогда цикл завершается. - После выполнения всех команд тела цикла выполняется действие (3), указанное третьим аргументом.
- Скрипт возвращается к началу цикла и снова проверяет условие (2) и т.д.
var i; for (i = 2; i < 7; i = i * 2) { alert(i); }
Работа скрипта по шагам для данного примера:
- Переменной i присваивается начальное значение
2
. - Затем проверяется условие входа в цикл (
2 < 7
). Значение условияtrue
, следовательно выполняются действия в теле цикла (выводится сообщение с числом2
). - Далее выполняется действие, указанное третьим аргументом цикла (
i = i * 2
, т.е. переменная i получает значение4
). - Скрипт возвращается к началу цикла и проверяет условие (
4 < 7
). Значение сноваtrue
и на экране выводится сообщение с числом4
. - Переменной i присваивается значение
8
. - Скрипт возвращается к началу цикла и проверяет условие (
8 < 7
). Теперь значениеfalse
и дальше цикл не выполняется.
Цикл while
Цикл while
имеет более простую конструкцию, чем for
. Ему передается всего один аргумент - условие входа в цикл.
Работа цикла while
имеет следующий алгоритм:
- Условие для входа в цикл преобразуется в логический (
булевый
) тип и проверяется. Еслиtrue
, тогда выполняются действия в теле цикла. Еслиfalse
, тогда цикл завершается. - После выполнения всех команд тела цикла скрипт возвращается к началу цикла и снова проверяет условие и т.д.
var i = 1; while (i < 3) { alert(i); i++; }
Описание примера по шагам:
- Проверяется условие для входа в цикл (
1 < 3
). Значение условияtrue
, следовательно выполняются действия в теле цикла (выводится сообщение с числом1
и переменной i присваивается новое значение2
). - Снова проверяется условие для входа в цикл (
2 < 3
). Значение условияtrue
, следовательно выполняются действия в теле цикла (выводится сообщение с числом2
и переменной i присваивается новое значение3
). - Проверяется условие для входа в цикл (
3 < 3
). Теперь значениеfalse
- дальше цикл не выполняется.
Данный цикл легко воспринимается, так как все операции выполняются в той последовательности, в которой расположены. Хотя с помощью цикла for
запись была бы короче:
for (var i = 1; i < 3; i++) { alert(i); }
Цикл do…while
Цикл do…while
имеет конструкцию, схожую с while
. Ему также передается всего один аргумент, но это уже условие для повторения цикла, так как цикл обязательно выполнится хотя бы один раз.
Цикл do…while
работает по следующему алгоритму:
- Сначала выполняются все команды тела цикла.
- После этого условие для повторения цикла преобразуется в логический (
булевый
) тип и проверяется. Еслиtrue
, тогда цикл повторяется. Еслиfalse
, цикл завершается.
var i = 4; do { alert(i); } while (i < 3)
Значение условия false
, но цикл все равно выполнится один раз.
Случаи, когда необходимо использовать данный цикл, очень редки. К тому же его всегда можно заменить на цикл while
, а необходимые действия указать перед циклом.
Директива break
Чтобы принудительно прервать выполнение всего цикла, используется директива (ключевое слово) break
.
for (var i = 0; i < 3; i++) { if (i == 1) break; alert(i); }
В данном примере будет выведено только одно сообщение с числом 0
, так как при i = 1
цикл будет остановлен.
Директива continue
Директива (ключевое слово) continue
используется, чтобы принудительно прервать выполнение команд в теле цикла и перейти к проверке условия.
for (var i = 0; i < 3; i++) { if (i == 1) continue; alert(i); }
В данном примере при i = 1
выполнение действий в теле цикла будет остановлено, но работа цикла будет продолжена с проверки условия. В результате будут выведены сообщения с числами 0
и 2
.