1. Generator함수: function*, function* 선언문, function*표현식


function*

Generator function은 기존 함수 선언(표현)과 다르게 function뒤에 *키워드가 붙습니다. 그래서 function* 를 키워드로 사용합니다. 제너레이터 함수 형태는 일반 함수 형태처럼

function* 선언문

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/267eb373-7574-464a-ba7b-1fd95bf87a0d/Untitled.png

일반 함수 선언문과 동일하게 function* 뒤에 함수명을 작성합니다. 제너레이터 함수를 호출하면 함수 블록({ }) 을 실행한 결과값이 아니라 Generator 오브젝트를 생성하여 반환합니다.

여기서 Generator 오브젝트는 iterator 오브젝트로 next()를 통해 결과값을 받을 수 있습니다.

코드 분석

function* sports(one, two){ yield one + two; }
console.log(typeof sports);//function
const obj = sports(1, 2);
console.log(typeof obj);//object
console.log(obj.next());//{value: 3, done: false}
  1. console.log(typeof sports);

    ⇒ 제너레이터 함수의 타입은 function 입니다.

  2. const obj = sports(1, 2);

    ⇒ sports 함수를 호출하면 Generator Object를 생성하여 반환합니다. 이 반환하는 시점에서 함수의 블럭내의 코드를 싱행하지는 않습니다. 그리고 sports함수를 호출할 때 보낸 파라미터는 오브젝트에 설정되어 있습니다.

  3. new 연산자를 사용할 수 없는데 이는 단일 함수로 사용하겠다는 의미입니다.

  4. typeof obj

    ⇒ Generator 오브젝트의 타입은 object입니다.

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/181e2784-18cd-4c50-b72a-d2a487e8087e/Untitled.png

  5. obj.next()

    ⇒ Generator 오브젝트가 iterator 오브젝트이기에 next()함수를 호출할 수 있고 이때 코드가 실행됩니다.