제너레이터는 ES6에서 등장한 개념으로 함수의 실행을 중간에 멈추고 재개할 수 있는 독특한 기능이다. 실행을 멈출 때 값을 전달할 수 있기 때문에 반복문에서 제너레이터가 전달하는 값을 하나씩 꺼내서 사용할 수 있다.
yield 키워드를 사용하면 함수의 실행을 멈출 수 있다function* generatorFunc() {
yield 10;
yield 20;
return 'finished';
}
const gen = generatorFunc();
gen은 제너레이터 객체이다
function* generatorFunc() {
console.log('1');
yield 10;
console.log('2');
yield 20;
console.log('3');
return 'finished';
}
const gen = generatorFunc();
console.log(gen.next());
console.log(gen.next());
console.log(gen.next());

next 메소드를 호출하면 yield 키워드를 만날 때까지 실행되고, 만나면 데이터 객체를 반환한다yield 키워드를 만나면 done 속성값은 false가 되고, 만나지 못하면 done 속성값이 true가 된다done속성값이 true가 된 다음부터는 다음 코드를 실행하지 않고 undefined를 반환한다return 메소드의 매개변수가 데이터 객체의 value로 전달되고 제너레이터를 종료시킨다return 메소드를 호출하면 데이터 객체의 done 속성값은 참이 된다next 메소드를 호출해도 done 속성값은 참이 된다function* generatorFunc() {
console.log('1');
yield 10;
console.log('2');
yield 20;
console.log('3');
return 'finished';
}
const gen = generatorFunc();
console.log(gen.next());
console.log(gen.return('abc'));
console.log(gen.next());

done 속성값은 참이 된다function* generatorFunc() {
try {
console.log('1');
yield 10;
console.log('2');
yield 20;
console.log('3');
return 'finished';
}
catch (e) {
console.log(e);
}
}
const gen = generatorFunc();
console.log(gen.next());
console.log(gen.throw('some error'));


for of문과 전개 연산자...에서 사용할 수 있다function* f() {
yield 10;
yield 20;
yield 30;
}
for (let i of f()) {
console.log(i);
}
// 10
// 20
// 30
const arr = [...f()];
console.log(arr);
// [10, 20, 30]