JavaScript에서 이터레이터의 일회성 작동
각 이터레이터는 루프에 한 번만 참여할 수 있습니다.
이는 약간 예상 밖이지만, 논리적입니다 - 이미 수행된 이터레이터는
자신의 done을 false로 설정하므로,
더 이상 반복될 수 없기 때문입니다.
이를 확인해 봅시다. 다음과 같은 제너레이터가 있다고 가정합시다:
function *func() {
yield 1;
yield 2;
yield 3;
}
이터레이터를 만들어 봅시다:
let iter = func();
이터레이터를 하나의 루프로 반복해 봅시다:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
이제 이터레이터를 두 개의 루프로 반복해 봅시다:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // 작동하지 않음
}
문제를 해결하려면 각각의 새로운 루프에 대해 자체 이터레이터를 생성해야 합니다:
let iter1 = func();
for (let elem of iter1) {
console.log(elem); // 1, 2, 3
}
let iter2 = func();
for (let elem of iter2) {
console.log(elem); // 1, 2, 3
}
다음과 같이 단순화할 수 있습니다:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
다음 코드에서 발생한 오류를 수정하세요:
function *func() {
for (let i = 1; i <= 3; i++) {
yield i;
}
}
let elems = func();
for (let elem of elems) {
console.log(elem);
}
for (let elem of elems) {
console.log(elem);
}