0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>for относится к низкоуровневым циклам. Он требует задания счетчика, правил его изменения и условия остановки. Было бы значительно удобнее обходить элементы коллекции напрямую, без счетчика. Многие языки программирования решают это введением специального вида цикла. В JavaScript тоже есть такой: for...of.</p>
1
<p>for относится к низкоуровневым циклам. Он требует задания счетчика, правил его изменения и условия остановки. Было бы значительно удобнее обходить элементы коллекции напрямую, без счетчика. Многие языки программирования решают это введением специального вида цикла. В JavaScript тоже есть такой: for...of.</p>
2
<p>Как видно из примера, код, использующий for...of, получается значительно чище, чем с использованием цикла for. for...of знает о том, как перебирать элементы и знает о том, когда они закончатся. Поэтому счетчик не используется, а вместо доступа к элементу по индексу, например userNames[i], в цикле создается переменная const name. На каждой итерации она принимает значение элемента массива userNames, область видимости константы ограничена телом цикла.</p>
2
<p>Как видно из примера, код, использующий for...of, получается значительно чище, чем с использованием цикла for. for...of знает о том, как перебирать элементы и знает о том, когда они закончатся. Поэтому счетчик не используется, а вместо доступа к элементу по индексу, например userNames[i], в цикле создается переменная const name. На каждой итерации она принимает значение элемента массива userNames, область видимости константы ограничена телом цикла.</p>
3
<p>Этот цикл отлично подходит для задач агрегации:</p>
3
<p>Этот цикл отлично подходит для задач агрегации:</p>
4
<p>for...of - это больше, чем просто цикл для массивов. Для полного понимания принципов его работы, нужно разбираться в темах, которые мы еще не проходили, среди них объекты, упаковка/распаковка и итераторы. Если по-простому, то разные данные в JavaScript могут притворяться коллекциями элементов. Самый простой пример - это строка: for...of перебирает строку посимвольно.</p>
4
<p>for...of - это больше, чем просто цикл для массивов. Для полного понимания принципов его работы, нужно разбираться в темах, которые мы еще не проходили, среди них объекты, упаковка/распаковка и итераторы. Если по-простому, то разные данные в JavaScript могут притворяться коллекциями элементов. Самый простой пример - это строка: for...of перебирает строку посимвольно.</p>
5
<p>Однако не следует путать строку с массивом. Несмотря на внешнюю схожесть доступа к элементам строки по индексу, строка массивом не является.</p>
5
<p>Однако не следует путать строку с массивом. Несмотря на внешнюю схожесть доступа к элементам строки по индексу, строка массивом не является.</p>
6
<h2>Применимость</h2>
6
<h2>Применимость</h2>
7
<p>В большинстве задач, использующих цикл, предпочтительнее for...of. Иногда его бывает недостаточно, и требуется ручное управление обходом. В таких случаях можно возвращаться к использованию for. Например, когда нужно идти не по каждому элементу массива, а через один:</p>
7
<p>В большинстве задач, использующих цикл, предпочтительнее for...of. Иногда его бывает недостаточно, и требуется ручное управление обходом. В таких случаях можно возвращаться к использованию for. Например, когда нужно идти не по каждому элементу массива, а через один:</p>
8
<p>Иногда нужно обходить массив в обратном порядке. for...of здесь бессилен и снова нужен for:</p>
8
<p>Иногда нужно обходить массив в обратном порядке. for...of здесь бессилен и снова нужен for:</p>
9
<p>Другие задачи вообще с массивами напрямую не связаны. К последним относятся ситуации, когда нужно перебирать числа в определенном диапазоне. В этом случае нет массива, по которому можно было бы пройтись с помощью for...of.</p>
9
<p>Другие задачи вообще с массивами напрямую не связаны. К последним относятся ситуации, когда нужно перебирать числа в определенном диапазоне. В этом случае нет массива, по которому можно было бы пройтись с помощью for...of.</p>
10
<p>Ну и наконец, встречаются задачи, в которых нужно во время обхода менять исходный массив:</p>
10
<p>Ну и наконец, встречаются задачи, в которых нужно во время обхода менять исходный массив:</p>
11
<p><em>Если заглядывать в будущее и в то, как пишется реальный код на JavaScript, то там появляются функции высшего порядка. То есть на практике циклы, можно сказать, не нужны за редким исключением. Однако, невозможно перепрыгнуть работу с циклами, так как это база. А функции высшего порядка требуют понимания таких тем, которые за один присест не изучаются.</em></p>
11
<p><em>Если заглядывать в будущее и в то, как пишется реальный код на JavaScript, то там появляются функции высшего порядка. То есть на практике циклы, можно сказать, не нужны за редким исключением. Однако, невозможно перепрыгнуть работу с циклами, так как это база. А функции высшего порядка требуют понимания таких тем, которые за один присест не изучаются.</em></p>