본문 바로가기

개발/JS

[JS 기초] Generator 함수

Generator 함수: 빠져나갔다가 나중에 다시 실행할 수 있는 함수 입니다. 이때 컨텍스트(변수 값)는 출입 과정에서 저장된 상태로 남아 있습니다.

 

문법:

function* name([param[, param[, ... param]]]) {
   statements
}

 Generator 함수는 호출되어도 즉시 실행되지 않고, 대신 함수를 위한 iterator 객체가 반환  Iterator의 next() 메서드를 호출하면 Generator 함수가 실행되어 yield 문을 만날 때까지 진행합니다.

 

이후 다시 next() 메서드가 호출되면 진행이 멈췄던 위치에서부터 재실행합니다. next() 가 반환하는 객체는 yield문이 반환할 값(yielded value)을 나타내는 value 속성과, Generator 함수 안의 모든 yield 문의 실행 여부를 표시하는 boolean 타입의 done 속성을 갖습니다.

 

next() 를 인자값과 함께 호출할 경우, 진행을 멈췄던 위치의 yield 문을  next() 메서드에서 받은 인자값으로 치환하고 그 위치에서 다시 실행하게 됩니다.

 

예제:

function* logGenerator() {
  const first = yield 1;
  console.log(first); // next 호출시 넘겨받은 값을 출력합니다.
  const second = yield first + 1;
  console.log(second);
  const third = yield second + 1;
  console.log(third);
}

var gen = logGenerator();
var result;

result = gen.next(); // {value: 1, done: false}
result = gen.next(result.value); // {value: 2, done: false}
result = gen.next(result.value); // {value: 3, done: false}
result = gen.next(result.value); // {value: undefined, done: true}

 

'개발 > JS' 카테고리의 다른 글