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

 

function* - JavaScript | MDN

function* 선언 (끝에 별표가 있는 function keyword) 은 generator function 을 정의하는데, 이 함수는 Generator 객체를 반환합니다.

developer.mozilla.org

300x250
728x90