generator


[왜 제너레이터 함수를 써야하는가]

  1. 비동기 구조를 동기적 코드방식으로 작성할 수 있게한다

  2. 이터레이터와 이터러블을 쉽게 사용 할 수 있다

  3. generator 함수는 동시적 특성, 코루틴 특성을 가지고있다

  4. 메모리 효율에 기여 할 수 있다

[코드로 보기]

function* quips(name) {
  yield "hello " + name + "!";
  yield "i hope you are enjoying the blog posts";
  if (name.startsWith("X")) {
    yield "it's cool how your name starts with X, " + name;
  }
  yield "see you later!";
}
// yield는 return 과 비슷
// return은 함수당 한번 실행되지만
// yield 는 여러번 실행 가능

// 함수는 스스로 실행을 멈출 수 없지만
// 제너레이터 함수는 실행을 멈출 수 있다
> var iter = quips("jorendorff");
  [object Generator]
	// 함수를 바로 호출하지 않고 제너레이터 객체 를 리턴

> iter.next()
  { value: "hello jorendorff!", done: false }
> iter.next()
  { value: "i hope you are enjoying the blog posts", done: false }
> iter.next()
  { value: "see you later!", done: false }
> iter.next()
  { value: undefined, done: true }
	// 다음 yield 구분에 다 다를 때까지 계속 실행
	// .done이 true가 되고 마지막에 undefined를 리턴

[generator는 쓰레드가 아니다]

[generator는 이터레이터다]