Цикл do/while похож на цикл while, за исключением того, что выражение цикла проверяется в конце, а не в начале, и это значит, что тело цикла выполнится как минимум один раз. Вот синтаксис:
do {
инструкция
} while (выражение);
Между циклом do/while и обычным циклом while имеется два отличия:
1. Цикл do требует как ключевого слова do (для отметки начала цикла), так и ключевого слова while (для отметки конца цикла и указания условия).
2. Во-вторых, в отличие от цикла while, цикл do завершается точкой с запятой. Цикл while необязательно завершать точкой с запятой, если тело цикла заключено в фигурные скобки.
Инструкция цикла for
Инструкция for представляет собой цикл, который часто оказывается более удобней, чем while.
Большинство циклов имеют некоторую переменную-счетчик. Эта переменная инициализируется перед началом цикла и проверяется перед каждой итерацией. Наконец, переменная-счетчик инкрементируется или изменяется каким-либо другим образом в конце тела цикла, непосредственно перед повторной проверкой переменной.
Инициализация, проверка и обновление – это три ключевых операции, выполняемых с переменной цикла. Инструкция for делает эти три шага явной частью синтаксиса цикла:
for(инициализация; проверка; инкремент) инструкция;
Инициализация, проверка и инкремент – это три выражения (разделенных точкой с запятой), которые ответственны за инициализацию, проверку и увеличение переменной цикла. Расположение их в первой строке цикла упрощает понимание того, что делает цикл for, и не позволяет забыть о них.
Проще всего объяснить работу цикла for, показав эквивалентный ему цикл while:
инициализация;
while(проверка) {
инструкция
|
инкремент;
}
В JS допускается, чтобы выражение инициализации у инструкции for было инструкцией объявления переменной var или let поэтому можно одновременно объявить и инициализировать счетчик цикла.
Выражение проверки вычисляется перед каждой итерацией и определяет, будет ли выполняться тело цикла. Если результатом проверки является true, выполняется инструкция, являющаяся телом цикла.
В конце цикла вычисляется выражение инкремент. Чтобы использование этого выражения имело смысл, оно должно быть выражением с побочными эффектами. Обычно это либо выражение присваивания, либо выражение, использующее оператор ++ или --.
Вывести числа от 0 до 9 можно также с помощью цикла for, как показано ниже. В противовес эквивалентному циклу while, показанному в предыдущем разделе:
for(var count = 0; count < 10; count++) console.log(count);
Конечно, циклы могут быть значительно более сложными, чем в этих простых примерах, и иногда в каждой итерации цикла изменяется несколько переменных.
Эта ситуация – единственный случай в JavaScript, когда часто применяется оператор «запятая» – он позволяет объединить несколько выражений инициализации и инкрементирования в одно выражение, подходящее для использования в цикле for:
var i, j;
for(i = 0, j = 10; i < 10; i++, j--) {
sum += i * j
}
Примечание
Любое из трех выражений цикла for может быть опущено, но две точки с запятой являются обязательными. Если опустить выражение проверки, цикл будет повторяться вечно, и форма записи for(;;) является еще одним способом написать бесконечный цикл, подобно while(true).
Метки инструкций
|
Любая инструкция может быть помечена идентификатором: идентификатор: инструкция
Как выглядит в коде:
metka: for(let i = 10; I; i--){
//тело цикла
}
Помечая инструкцию, вы тем самым даете ей имя, которое затем можно будет использовать в качестве ссылки в любом месте в программе.
Пометить можно любую инструкцию, однако помечать имеет смысл только инструкции, имеющие тело, такие как циклы и условные инструкции. Присвоив имя циклу, его затем можно использовать в инструкциях break и continue, внутри цикла для выхода из него или для перехода в начало цикла, к следующей итерации.
Идентификатор, используемый в качестве метки инструкции, может быть любым допустимым идентификатором JS, кроме зарезервированного слова. Имена меток отделены от имен переменных и функций, поэтому в качестве меток допускается использовать идентификаторы, совпадающие с именами переменных или функций.
Метки инструкций определены только внутри инструкций, к которым они применяются (и, конечно же, внутри вложенных в них инструкций).
Вложенные инструкции не могут помечаться теми же идентификаторами, что и вмещающие их инструкции, но две независимые инструкции могут помечаться одинаковыми метками.
Инструкция break
Инструкция break приводит к немедленному выходу из самого внутреннего цикла или инструкции switch (мы с ней уже знакомились).
Синтаксис ее прост: break;
Ранее мы уже знакомились с использованием инструкции break внутри инструкции switch. В циклах она обычно используется для немедленного выхода из цикла, когда по каким-либо причинам требуется завершить выполнение цикла.
|
В языке JS допускается указывать имя метки за ключевым словом break (идентификатор без двоеточия): break имя_метки; Когда инструкция break используется с меткой, она выполняет переход в конец именованной инструкции. В случае отсутствия инструкции с указанной меткой попытка использовать такую форму инструкции break порождает синтаксическую ошибку.
Именованная инструкция не обязана быть циклом или инструкцией switch: инструкция break с меткой может выполнять «выход» из любой вмещающей ее инструкции. Объемлющая инструкция может даже быть простым блоком инструкций, заключенным в фигурные скобки исключительно с целью пометить его.
Важно!
Между ключевым словом break и именем метки не допускается вставлять символ перевода строки.
Инструкция continue
Инструкция continue должна использоваться только внутри циклов. Она схожа с инструкцией break, однако вместо выхода из цикла инструкция continue запускает новую итерацию цикла.
Синтаксис инструкции прост:
for(let i = 10; I; i--){
//тело цикла
continue;
}
Инструкция continue может также использоваться с меткой: continue имя_метки;
Когда выполняется инструкция continue, текущая итерация цикла прерывается и начинается следующая. Для разных типов циклов это означает разное:
· В цикле while указанное в начале цикла выражение проверяется снова, и если оно равно true, тело цикла выполняется с начала.
· В цикле do/while происходит переход в конец цикла, где перед повторным выполнением цикла снова проверяется условие.
· В цикле for вычисляется выражение инкремента и снова вычисляется выражение проверки, чтобы определить, следует ли выполнять следующую итерацию.
Обратите внимание на различия в поведении инструкции continue в циклах while и for: цикл while возвращается непосредственно к своему условию, а цикл for сначала вычисляет выражение инкремента, а затем возвращается к условию. Поскольку инструкция continue ведет себя в этих двух циклах по-разному, точно имитировать цикл for с помощью одного цикла while невозможно.
Важно!
Переводы строк между ключевым словом continue и именем метки не допускаются.