> For the complete documentation index, see [llms.txt](https://aleksandra-hrevtsova.gitbook.io/senior-front-end-javascript/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aleksandra-hrevtsova.gitbook.io/senior-front-end-javascript/bazovyi-sintaksis/cikly.md).

# Циклы

**Итерация** - единичное выполнение тела цикла.

**Тело цикла** - набор инструкций, заключенных в фигурные скобки (`{}`), исполняемых, если условие цикла приводится к `true`.

## WHILE

`while` — цикл, который выполняется пока условие, указанное перед его началом  приводится к true. Это условие проверяется перед запуском тела цикла. Если изначально перед запуском первой итерации условие приводится к false, цикл не запустится вовсе.

Схема цикла `while`

```
while (condition) {
    statement;
}
```

Пример использования цикла `while`

```
let counter = 0;

while (counter < 10) {
  console.log("counter: ", counter);
  counter += 1;
}
```

## DO WHILE

`do...while` — цикл, в котором условие проверяется после выполнения тела. Такой цикл всегда выполнится хотя бы раз, потому что сначала отрабатывает код цикла, только потом выход из-за условия, приведенного к `false`

&#x20;Схема цикла `do...while`

```
do {
    statement;
} while (condition)
```

Пример использования цикла `do...while`

```
let password = "";

do {
  password = prompt('Введите пароль не менее 8 символов');
} while (password.length < 8);

console.log("Ввели пароль: ", password);
```

![](/files/rFkh5ogDjFNYaWEFsKqg)

## FOR

**Цикл со счётчиком** - цикл, в котором некоторая переменная изменяет своё значение от заданного начального до конечного значения с некоторым шагом и для каждого значения этой переменной тело цикла выполняется один раз.

В большинстве процедурных языков программирования реализуется конструкцией `for`, в которой указывается счётчик, требуемое количество итераций и шаг, с которым изменяется счётчик.

```
for (initialization; condition; post-expression) {
  // statements
}
```

Алгоритм исполнения цикла `for`:

* **Инициализация (initialization)** - выполняется один раз перед началом цикла. Используется для создания переменной-счётчика и указания её начального значения.
* **Условие (condition)** - выражение, оцениваемое перед каждой итерацией (повторением) цикла. Тело цикла выполняется только тогда, когда выражение приводится к `true`. Цикл завершается, если значение будет `false`.
* **Тело (statements)** - набор инструкций для выполнения на каждом повторении. Выполняется если выражение условия приводится к `true`.
* **Пост-выражение (post-expression)** - выполняется в конце каждого повторения цикла, перед проверкой условия. Используется для обновления переменной-счётчика.

Переменные-счетчики, по традиции, называются буквами `i`, `j` и `k`.

```
for (let i = 0; i <= 20; i += 5) { 
    console.log(i);
}
```

В примере объявляется перемнная-счетчик `i`, инициализируется значением `0` и цикл выполняется до тех пор, пока `i <= 20`, то есть условие приводится к `true`. После каждой итерации счётчик увеличивается на `5`.

Посчитаем сумму чисел до определенного значения.

```
const target = 3;
let sum = 0;

for (let i = 0; i <= target; i += 1) {
  sum += i;
}

console.log(sum);
```

Вспомним про операцию `a % b` и выведем остаток от деления используя цикл.

```
const max = 10;
for (let i = 0; i < max; i += 1) {
  console.log(`${max} % ${i} = `, max % i);
}
```

### Оператор `break`[​](https://goit.global/textbooks/javascript-yk5evp/v2/docs/lesson-02/loops#%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80-break) <a href="#operator-break" id="operator-break"></a>

Прервать выполнение цикла можно в любой момент. Для этого сущестует оператор `break`, который полностью прекращает выполнение цикла и передаёт управление на строку за его телом.

Найдём число `3`. Как только выполнится условие `if`, цикл прекратит своё выполнение (будет прерван).

```
for (let i = 0; i <= 5; i += 1) {  
    console.log(i);  
    if (i === 3) {    
        console.log("Нашли число 3, прерываем выполнение цикла");    
        break;  
    }
}

console.log("Лог после цикла");
```

### Оператор `continue`[​](https://goit.global/textbooks/javascript-yk5evp/v2/docs/lesson-02/loops#%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80-continue) <a href="#operator-continue" id="operator-continue"></a>

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

Используем цикл для вывода только нечетных чисел. Для чётных `i` срабатывает `continue`, выполнение тела прекращается и управление передаётся на следующую итерацию.

```
const number = 10;

for (let i = 0; i < number; i += 1) {  
    if (i % 2 === 0) {    
    continue;  
}  

console.log("Нечетное i: ", i); // 1, 3, 5, 7, 9}
```
