JavaScript. Подробное руководство, 6-е издание
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("Пустой массив");</b><b> else { </b><b> do {</b><b> console.log(a[і]);</b><b> } while (++i < len);</b><b> }</b><b>}</b>Между циклом
и обычным циклом while имеется два отличия. Во-первых, цикл<b>do/while</b>o требует как ключевого слова<b>d</b>(для отметки начала цикла), так и ключевого слова<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>упрощает конструирование циклов, следующих шаблону, общему для большинства циклов. Большинство циклов имеют некоторую переменную-счетчик. Эта переменная инициализируется перед началом цикла и проверяется перед каждой итерацией. Наконец, переменная-счетчик инкрементируется или изменяется каким-либо другим образом в конце тела цикла, непосредственно перед повторной проверкой переменной. Инициализация, проверка и обновление - это три ключевых операции, выполняемых с переменной цикла. Инструкция for делает эти три шага явной частью синтаксиса цикла:<b>for</b><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 < 10; count++) </b><b> console.log(count);</b>Конечно, циклы могут быть значительно более сложными, чем в этих простых примерах, и иногда в каждой итерации цикла изменяется несколько переменных. Эта ситуация - единственный случай в JavaScript, когда часто применяется оператор «запятая» - он позволяет объединить несколько выражений инициализации и инкрементирования в одно выражение, подходящее для использования в цикле for:
<b>var і, j</b><b>for(i =0, j = 10; і < 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>