Generator

Generator 객체는 generator function 으로부터 반환되며, 반복 가능한 프로토콜반복자 프로토콜을 모두 준수합니다.

Constructor

이 객체는 바로 인스턴스화할 될 수 없습니다. 대신 제너레이터 함수를 통해 Generator 인스턴스를 반환할 수 있습니다.

js
function* generator() {
  yield 1;
  yield 2;
  yield 3;
}

const gen = generator(); // "Generator { }"

console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3

인스턴스 메서드

Generator.prototype.next()

yield 표현식을 통해 yield된 값을 반환합니다.

Generator.prototype.return()

주어진 값을 반환하고 제너레이터를 종료합니다.

Generator.prototype.throw()

제너레이터에 오류를 발생시킵니다. (해당 제너레이터 내에서 오류가 발생한 경우가 아닌 한 제너레이터도 완료)

예제

무한 제너레이터

제너레이터 함수를 사용하면 값은 필요할 때까지 계산되지 않습니다. 따라서 제너레이터는 잠재적으로 무한한 데이터 구조를 정의할 수 있습니다.

js
function* infinite() {
  let index = 0;

  while (true) {
    yield index++;
  }
}

const generator = infinite(); // "Generator { }"

console.log(generator.next().value); // 0
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
// ...

명세서

Specification
ECMAScript Language Specification
# sec-generator-objects

브라우저 호환성

BCD tables only load in the browser

같이 보기