일반적인 함수는 한 번 실행되면 끝날 때까지 멈출 수 없다.
function normalFunc(){
console.log('I');
console.log('cannot');
console.log('be');
console.log('stopped');
}
하지만 generator function은 중간에 멈출 수 있고, 멈춘 지점부터 다시 이어서 나갈 수 있다.
Generator는 iterator
를 작성하는 일을 단순하게 해주는 특수한 함수이다.
Generator는 단일 값이 아닌 일련의 결과물을 생성하는 함수이다.
JavaScript에서 generator는 iterator
를 반환한다.
Symbol.iterator
를 신경쓰지 않아도 된다.
next()
를 실행할 필요가 없다.
수동적으로 next()
의 반환 객체를 만들 필요가 없다
{ value : any , done : boolean }
상태를 따로 저장할 필요가 없다.
iterator
이면서 iterable
이기 때문에 내부에서 상태를 관리할 수 있다.Lazy Evaluation, 게으른 평가법
let x = 10;
if(x < 5 && x === 10) { ... }
// x < 5는 이미 false 이므로
// 뒤의 연산 x===10은 실행하지 않는다
Lazy Evalutaion
방식을 사용한다.