JavaScript에서 이터레이터의 일회성 작동

각 이터레이터는 루프에 한 번만 참여할 수 있습니다. 이는 약간 예상 밖이지만, 논리적입니다 - 이미 수행된 이터레이터는 자신의 done을 false로 설정하므로, 더 이상 반복될 수 없기 때문입니다.

이를 확인해 봅시다. 다음과 같은 제너레이터가 있다고 가정합시다:

javascriptfunction *func() {
  yield 1;
  yield 2;
  yield 3;
}

이터레이터를 만들어 봅시다:

javascriptlet iter = func();

이터레이터를 하나의 루프로 반복해 봅시다:

javascriptfor (let elem of iter) {
  console.log(elem); // 1, 2, 3
}

이제 이터레이터를 두 개의 루프로 반복해 봅시다:

javascriptfor (let elem of iter) {
  console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
  console.log(elem); // 작동하지 않음
}

문제를 해결하려면 각각의 새로운 루프에 대해 자체 이터레이터를 생성해야 합니다:

javascriptlet 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
}

다음과 같이 단순화할 수 있습니다:

javascriptfor (let elem of func()) {
  console.log(elem); // 1, 2, 3
}

for (let elem of func()) {
  console.log(elem); // 1, 2, 3
}
Задание 1

다음 코드에서 발생한 오류를 수정하세요:

javascriptfunction *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);
}