Iterable

by Arnaud Buchholz

JavaScript

function closureRange (from, to) {
  let current = from
  const iterable = {}
  iterable[Symbol.iterator] = function () {
    return {
      next: function () {
        const value = current
        const done = current > to
        ++current
        return { done, value }
      }
    }
  }
  return iterable
}

function *generatorRange (from, to) {
  for (let current = from; current <= to; ++current) {
    console.log('step ', current)
    yield current
  }
}

/* console.log('closureRange', closureRange(1, 5)) */
console.log('generatorRange', [...generatorRange(1, 5)])
const iterator = generatorRange(1, 5)
console.log(iterator)
console.log('first value', iterator.next())
console.log('second value', iterator.next())
for (let variable of object)