# Циклы

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

**Тело цикла** - набор инструкций, заключенных в фигурные скобки (`{}`), исполняемых, если условие цикла приводится к `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}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://aleksandra-hrevtsova.gitbook.io/senior-front-end-javascript/bazovyi-sintaksis/cikly.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
