JavaScript. Подробное руководство, 6-е издание, стр. 52

5.5.2. Инструкция do/while

Цикл

<b>do/while</b>
во многом похож на цикл
<b>while</b>
, за исключением того, что выражение цикла проверяется в конце, а не в начале. Это значит, что тело цикла всегда выполняется как минимум один раз. Эта инструкция имеет следующий синтаксис:

<b>do</b>

<b>  инструкция</b>

<b>while (выражение);</b>

Цикл

<b>do/while</b>
используется реже, чем родственный ему цикл
<b>while</b>
. Дело в том, что на практике ситуация, когда вы заранее уверены, что потребуется хотя бы один раз выполнить тело цикла, несколько необычна. Ниже приводится пример использования цикла
<b>do/while</b>
:

<b>function printArray(a) {</b>

<b>  var len = a.length, і = 0; </b>

<b>  if (len == 0)</b>

<b>    console.log(&quot;Пустой массив&quot;);</b>

<b>  else { </b>

<b>    do {</b>

<b>      console.log(a[і]);</b>

<b>    } while (++i &lt; len);</b>

<b>  }</b>

<b>}</b>

Между циклом

<b>do/while</b>
и обычным циклом while имеется два отличия. Во-первых, цикл
<b>d</b>
o требует как ключевого слова
<b>do</b>
(для отметки начала цикла), так и ключевого слова
<b>while</b>
(для отметки конца цикла и указания условия). Во-вторых, в отличие от цикла
<b>while</b>
, цикл
<b>do</b>
завершается точкой с запятой. Цикл
<b>while</b>
необязательно завершать точкой с запятой, если тело цикла заключено в фигурные скобки.

5.5.3. Инструкция for

Инструкция

<b>for</b>
представляет собой конструкцию цикла, которая часто оказывается более удобной, чем инструкция
<b>while</b>
. Инструкция
<b>for</b>
упрощает конструирование циклов, следующих шаблону, общему для большинства циклов. Большинство циклов имеют некоторую переменную-счетчик. Эта переменная инициализируется перед началом цикла и проверяется перед каждой итерацией. Наконец, переменная-счетчик инкрементируется или изменяется каким-либо другим образом в конце тела цикла, непосредственно перед повторной проверкой переменной. Инициализация, проверка и обновление - это три ключевых операции, выполняемых с переменной цикла. Инструкция for делает эти три шага явной частью синтаксиса цикла:

<b>for(инициализация; проверка; инкремент) инструкция</b>

Инициализация, проверка и инкремент - это три выражения (разделенных точкой с запятой), которые ответственны за инициализацию, проверку и увеличение переменной цикла. Расположение их в первой строке цикла упрощает понимание того, что делает цикл

<b>for</b>
, и не позволяет забыть инициализировать или увеличить переменную цикла.

Проще всего объяснить работу цикла for, показав эквивалентный ему цикл while: [5]

)

<b>инициализация; </b>

<b>while(проверка) { </b>

<b>  инструкция </b>

<b>  инкремент:</b>

<b>}</b>

Другими словами, выражение инициализации вычисляется один раз перед началом цикла. Это выражение, как правило, является выражением с побочными эффектами (обычно присваиванием). В JavaScript также допускается, чтобы выражение инициализации было инструкцией объявления переменной

<b>var</b>
, поэтому можно одновременно объявить и инициализировать счетчик цикла. Выражение проверки вычисляется перед каждой итерацией и определяет, будет ли выполняться тело цикла. Если результатом проверки является истинное значение, выполняется инструкция, являющаяся телом цикла. В конце цикла вычисляется выражение инкремент. Чтобы использование этого выражения имело смысл, оно должно быть выражением с побочными эффектами. Обычно это либо выражение присваивания, либо выражение, использующее оператор
<b>++</b>
или --.

Вывести числа от 0 до 9 можно также с помощью цикла

<b>for</b>
, как показано ниже. В противовес эквивалентному циклу
<b>while</b>
, показанному в предыдущем разделе:

<b>for(var count = 0; count &lt; 10; count++) </b>

<b>  console.log(count);</b>

Конечно, циклы могут быть значительно более сложными, чем в этих простых примерах, и иногда в каждой итерации цикла изменяется несколько переменных. Эта ситуация - единственный случай в JavaScript, когда часто применяется оператор «запятая» - он позволяет объединить несколько выражений инициализации и инкрементирования в одно выражение, подходящее для использования в цикле for:

<b>var і, j</b>

<b>for(i =0, j = 10; і &lt; 10; i++, j--) </b>

<b>  sum += і * j;</b>

Во всех наших примерах циклов, представленных до сих пор, переменная цикла содержала число. Это достаточно распространенная, но не обязательная практика. В следующем примере цикл

<b>for</b>
используется для обхода связанного списка структур данных и получения последнего объекта в списке (например, первого объекта, который не имеет свойства
<b>next</b>
):

<b>function tail(о) {                      // Возвращает последний элемент в списке о</b>

<b>  fоr(; о.next; о = о.next) /*пустое*/; // Выполнять обход, пока о.next </b>