-
iterator이고 iterable이다.
-
Iterable
Symbol.iterator 메서드가 있다.
Symbol.iterator는 iterator를 반환해야 한다.
-
itrator
next 메서드를 가진다.
next 메서드는 value와 done속성을 가진 객체를 반환한다.
작업이 끝나면 done은 true가 된다.
-
-
함수의 실행을 중간에 멈췄다가 재개할 수 있는 기능. 다른 작업을 하다가 다시 돌아와서 next() 해주면 진행이 멈췄던 부분부터 이어서 실행
-
요청에 따라 그 산출된(yielded, yield 식으로 산출된) 값을 계산하고, 계산하기 비싼(힘든) 수열 또는 무한 수열이라도 효율적으로 나타내게함.
-
값을 미리 만들어두지 않아 메모리 관리 측면에서 효율적임
-
break가 없는 while(true)도 사용가능함
-
필요한 순간까지 계산을 미룰 수 있다
function* gen() {
try {
yield 1;
yield 2;
yield 3;
} catch (e) {
console.log(e);
}
var g = gen(); // "Generator { }"
-
next()
yield 표현을 통해 yield된 값을 반환합니다. 가장 가까운 yield문을 실행하고 종료됩니다.
또한 생성기의 내부 상태를 수정하는 데 쓰일 수 있는 값을 받습니다.
next()
에 전달되는 값은 생성기가 중단된 마지막yield
식의 결과로 처리됩니다.-
예제
function* fibonacci(){ var fn1 = 0; var fn2 = 1; while (true){ var current = fn1; fn1 = fn2; fn2 = current + fn1; var reset = yield current; if (reset){ fn1 = 0; fn2 = 1; } } } var sequence = fibonacci(); console.log(sequence.next().value); // 0 console.log(sequence.next().value); // 1 console.log(sequence.next().value); // 1 console.log(sequence.next().value); // 2 console.log(sequence.next().value); // 3 console.log(sequence.next().value); // 5 console.log(sequence.next().value); // 8 console.log(sequence.next(true).value); // 0 console.log(sequence.next().value); // 1 console.log(sequence.next().value); // 1 console.log(sequence.next().value); // 2
-
-
return()
주어진 값을 반환하고 생성기를 종료합니다.
-
throw()
생성기로 에러를 throw합니다.