Я обнаружил, что многие программисты неправильно используют цикл for. Я думаю, что все видели такой код:

const arr = [1, 2, 3, 4];
for (let i=0; i < arr.length; i++ ) {
    console.log (arr[i]);
}

Что не так с этим? В каждом цикле мы вычисляем длину arr. И эта длина не меняется, поэтому чтение одной и той же информации X раз - пустая трата ресурсов.

Второй подход, который мы видим, - это улучшенная версия предыдущего:

const arr = [1, 2, 3, 4];
const arrLength = arr.length;
/*
* Some superb comment about what is happening
* in this very loop
*/
for (let i=0; i < arrLength; i++ ) {
    console.log (arr[i]);
}

Лучше, но arrLength выходит за рамки цикла.

Итак, давайте попробуем третий вариант, который я предпочитаю:

const arr = [1, 2, 3, 4];
/*
* Some superb comment about what is happening
* in this very loop
*/
for (let i=0, arrLength = arr.length; i < arrLength; i++){
    console.log (arr[i]);
}

Все переменные, которые нам нужны в цикле for, определены в его области видимости. Он намного короче и улучшает управление памятью (ни одна переменная не живет дольше, чем это необходимо).

Это возможно, потому что цикл for имеет следующий синтаксис:

for (initialization; condition; statement ) {
   //code block to be executed in each loop
}

Мы даже можем сделать такой код:

const arr = [1, 2, 3, 4];
for (let i=0, arrLength = arr.length; i < arrLength; console.log (arr[i++]) );

Но не рекомендую. Трудно читать и понимать.

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





Ниже приведен небольшой пример:

const myArray = [1, 2, 3, 4];
const map = f => x => Array.prototype.map.call(x, f)
const log = x => console.log(x);
const logElementsInArray = map(log);
logElementsInArray(myArray);