Итераторы:
В JavaScript итератор — это объект, определяющий последовательность и потенциально возвращаемое значение после его завершения.
Более конкретно, итератор — это любой объект, который реализует метод next(), который возвращает объект
с двумя свойствами: значением, следующим значением в последовательности; и выполнено, что верно, если последнее значение в последовательности
уже использовано. Если value присутствует рядом с done, это возвращаемое значение итератора.

После создания объект итератора можно явно повторять, многократно вызывая next().
Говорят, что перебор итератора потребляет итератор, потому что обычно это можно сделать только один раз.
После получения завершающего значения дополнительные вызовы next() должны просто продолжать возвращать {done: true}.

Наиболее распространенным итератором в Javascript является итератор Array, который просто последовательно возвращает каждое значение в связанном массиве
. Хотя легко представить, что все итераторы могут быть выражены в виде массивов, это не так.
Массивы должны размещаться целиком, но итераторы используются только по мере необходимости и, таким образом, могут выражать
последовательности неограниченных размер, например диапазон целых чисел от 0 до бесконечности.

Вот пример, который может сделать именно это. Это позволяет создать простой итератор диапазона, который определяет
последовательность целых чисел от начала (включительно) до конца (исключительно) с интервалом в шаге. Его окончательное возвращаемое значение равно
размеру созданной им последовательности.

Пример:
function makeRangeIterator(start = 0, end = Infinity, step = 1) {
let nextIndex = start;
let loopCount = 0;
let return = false;

const rangeIterator = {
next: function () {
var result;
if (nextIndex ‹= end) {
result = { value: nextIndex, done: false }
nextIndex += step;
loopCount++;
} else /* уже возвращено окончательное значение */ {
result = { value: loopCount, done: true }
}
вернуть результат;
}
};
вернуть rangeIterator;
}

пусть это = makeRangeIterator (1, 10, 2);

let result = it.next();
while (!result.done) {
console.log(result.value); // 1 3 5 7 9
результат = it.next();
}

console.log("Итерация последовательности размера: ", result.value);