[Symbol.iterator]()
메소드로 반환하는 이터레이터 객체는 무엇일까요?const fakeIter = () => {
return {
next() {
return { value: 1000, done: false };
},
};
};
const iterable = {
[Symbol.iterator]() {
let i = 3;
return {
next() {
return i == 0 ? { done: true } : { value: i--, done: false };
},
};
},
};
console.log(iterable[Symbol.iterator]().next()); // 3
for (const a of iterable) console.log(a); // 3 2 1 순으로 순회가 가능합니다.
const iterable = {
[Symbol.iterator]() {
let i = 3;
return {
next() {
return i == 0 ? { done: true } : { value: i--, done: false };
},
[Symbol.iterator]() {
return this
}, // well-formed iterable
};
},
};
let iterator = iterable[Symbol.iterator]();
console.log(iterator.next().value); // 3
for (const a of iterator) console.log(a); // 2 1
iterable[Symbol.iterator]() == iterable
텍스트 이 되게 함으로써 자기 자신이 얼마나 순회하였는지 기억할 수 있는 wellformed iterable이 됩니다.const iterable = {
[Symbol.iterator]() {
let i = 3;
return {
next() {
return i == 0 ? { done: true } : { value: i--, done: false };
},
[Symbol.iterator]() {
return fakeIter();
},
};
},
};
let iterator = iterable[Symbol.iterator]();
console.log(iterator.next()); // { value: 3, done: false }
for (const a of iterator) console.log(a); // 1000이 무한반복됩니다.
따라서 자기 자신을 참조하여 얼마나 순회하였는지 기억할 수 있게 합니다.!