320x100
320x100
function*
: generator function을 의미하며, 이 함수는 Generator 객체를 반환한다
function* generator(i) {
yield i;
yield i + 10;
}
const gen = generator(10);
console.log(gen.next().value);
// Expected output: 10
console.log(gen.next().value);
// Expected output: 20
- 파라미터
: param (함수에 전달되는 인수. 255개까지 가능)
generator
: 빠져나갔다가 다시 돌아올 수 있는 함수
: 이때 변수는 출입 과정에서 저장된 상태로 남아있음
: 제너레이터 함수는 호출되어도 즉시 실행되지 않고 함수를 위한 이터레이터 객체가 반환됨
: 이 객체에 대해 next() 메서드를 호출하면 yield 문을 만날때까지 진행하고 값을 반환
: yield* 문을 마주치면 다른 제너레이터 함수가 위임되어 진행 (deleagate)
- delegate
: 자신이 가지고 있던 값을 다른 객체에게 넘겨주는 것
예제
function* idMaker() {
var index = 0;
while (index < 3) yield index++;
}
var gen = idMaker();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // undefined
: 제너레이터 함수 내 index 변수는 계속 저장되다가 yield 문을 만나지 못하게 되자 사라진다
: 즉, yield 문을 만났을때 값을 반환한다는 의미
function* anotherGenerator(i) {
yield i + 1;
yield i + 2;
yield i + 3;
}
function* generator(i) {
yield i;
yield* anotherGenerator(i);
yield i + 10;
}
var gen = generator(10);
console.log(gen.next().value); // 10
console.log(gen.next().value); // 11
console.log(gen.next().value); // 12
console.log(gen.next().value); // 13
console.log(gen.next().value); // 20
: 처음 yield문을 만난 후 값을 반환하고 한 번 더 호출했을때 그 다음 yield 문을 수행한다
: 즉, 제너레이터 함수는 yield 문을 만날때까지 실행되고 함수 내의 변수가 유효한채로 들어갔다 나올 수 있다
Reference
300x250
728x90
'Programming > JavaScript' 카테고리의 다른 글
자바스크립트 require와 import의 차이 (0) | 2023.08.11 |
---|---|
JS import export 완벽 정리 (5) | 2023.08.11 |
편리한 자바스크립트 ORM - Prisma (0) | 2023.07.07 |
백엔드 입문자를 위한 자바스크립트 생태계 (0) | 2023.07.07 |
코루틴 (CoRoutine)과 서브루틴 (SubRoutine)의 차이 (1) | 2023.06.05 |