JavaScript. Подробное руководство, 6-е издание, стр. 151
<b>let serialNumberGenerator = counter(1000); </b><b>let sn1 = serialNumberGenerator.next(); // 1000 </b><b>let sn2 = serialNumberGenerator.next(); // 1001</b>При работе с конечными коллекциями метод
<b>next()</b><b>Stoplteration</b><b>Stoplteration</b><i>Stoplteration</i><b>TypeErгог()</b><b>RangeError().</b><b>rangelter(),</b><b>// Функция, возвращающая итератор диапазона целых чисел </b><b>function rangelter(first, last) { </b><b> let nextValue = Math.ceil(first); </b><b> return {</b><b> next: function() {</b><b> if (nextValue > last) throw Stoplteration;</b><b> return nextValue++;</b><b> }</b><b> };</b><b>}</b><b>// Пример неудобной реализации итераций с помощью итератора диапазона,</b><b>let r = rangelter(1.5); // Получить объект-итератор</b><b>while(true) { // Теперь использовать его в цикле</b><b> try {</b><b> console.log(г.next()); // Вызвать метод next() итератора</b><b> catch(e) {</b><b> if (е == Stoplteration) break; // Завершить цикл по Stoplteration else throw e;</b><b> }</b><b>}</b>Обратите внимание, насколько неудобно использовать объект-итератор в цикле из-за необходимости явно обрабатывать исключение
<b>Stoplteration</b><b>__iterator__()</b>В JavaScript 1.7 в цикл
<b>for/in</b><b>for/in</b><b>__iterator__(), </b><b>next()</b><b>for/in</b><b>Stoplteration</b><b>range(),</b><b>for/in</b><b>while</b><b>// Вернуть объект, представляющий диапазон. </b><b>// Границы диапазона не изменяются </b><b>// и хранятся в замыкании.</b><b>// Диапазоны могут проверять вхождение, max;</b><b>// Возвращает итерируемый объект, представляющий диапазон чисел </b><b>function range(min,max) { return {</b><b> get min() { return min; }, </b><b> get max() { return max; },</b><b> includes: function(x) {</b><b> return min <= x && x <= max;</b><b> },</b><b> toString: function() { // Диапазоны имеют строковое представление,</b><b> return "[" + min + "," + max + "]";</b><b> },</b><b> __iterator__: function() { // Возможно выполнять итерации по диапазону</b><b> let val = Math.ceil(min); // Сохранить текущ. позицию в замыкании.</b><b> return { // Вернуть объект-итератор.</b><b> next: function() { // Вернуть следующее число в диапазоне.</b><b> if (val > max) // Если достигнут конец - прервать итерации</b><b> throw StopIteration;</b><b> return val++; // Иначе вернуть следующее число</b><b> } // и увеличить позицию</b><b> };</b><b> }</b><b> };</b>