[Symbol.iterator]:() IterableIterator<T>;

0부터 10 이하까지 숫자의 2배를 순회하는 iterator(반복자) 만들기!

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 조건을 검사를 해서인듯 싶다...