Edited at

JavaScriptでrange関数


Symbol.iterator

const range = i => ({

[Symbol.iterator]() {
return {
index: 0,
next() {
return this.index < i
? { value: this.index++ }
: { done: true }
},
}
},
})


Symbol.iterator + Generator

const range = n => ({ 

*[Symbol.iterator](){
let index = 0
while(index < n) yield index++
}
})


Generator

function* range(n) {

let index = 0
while (index < n) yield index++
}


Result

for (const i of range(10)) console.log(i)

// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9