array = [...Array(11).keys()];
const iterator = array.values();
while(true){
const item = iterator.next();
if(item.done) break;
console.log((item.value)*2);
}
const multiple = {
[Symbol.iterator]: () => {
const max = 10;
let num = 0;
return {
next() {
return {value: num++*2, done: num > max};
},
};
},
};
console.clear();
for(const num of multiple) {
console.log(num);
}
function makeIterable(initialValue, maxValue, callback) {
return{
[Symbol.iterator]: () => {
const max = maxValue;
let num = initialValue;
return {
next() {
return {value: callback(num++), done: num > max};
},
};
},
}
};
const multiple = makeIterable(0, 10, (num) => num*2);
console.clear();
for(const num of multiple) {
console.log(num);
}
이때, 8번째 줄 {value: callback(num++), done : num > max}때문에, maxValue 값을 10으로 넣어주면, 마지막 return을 10의 배수인 20이 아닌, 9의 배수인 18에서 끝난다.
next() 함수에서 done의 조건이 참이되는 값이 num==10이고, num+1(10+1) 값으로 done 조건을 검사를 해서인듯 싶다...