👋 Generator 함수


1. function*

  • Generator function : function* 키워드를 사용한 함수
  • 제너레이터 함수 형태 : function* 선언문, function* 표현식, Generator Function

    function* sports(one) {}
    const book = function* (one) {};
    const music = Object.getProtytpeOf(function* () {}).constructor;
    const gen = new music();
  • 작성 방법 :function* 다음에 소괄호() 작성이어서 작성해도 되고 하나 이상 띄워도 됨

2. funtion* 선언문

  • function* 다음에 함수 이름 작성
  • 제너레이터 함수를 호출하면 함수 블록{}을 실행하지 않고

    • Generator오브젝트를 생성하여 반환
    function* sports(one, two) {
    yield one + two;
    }
    
    console.log(typeof sports); // true
    
    const obj = sports(1, 2);
    console.log(typeof obj); // object
    console.log(obj.next()); // {value: 3, done: false}
    
    // 1. function* sports(one, two){} 선언문 형태의 제너레이터 ㅎ마수 임
    // 2. 제너레이터 함수의 타입은 function
    // 3. const obj = sports(1, 2); sports 함수를 호출하면 Generator 오브젝트를 생성하여 반환함
    // 4. 이때, 함수 코드를 실행하지 않음
    // 5. 파라미터 값은 생성한 오브젝트에 설정됨
    // 6. new 연산자를 사용할 수 없음, 단일 함수로 사용하겠다는 뉘앙스
    // 7. typeof obj 생성한 Generator 오브젝트 타입 object
    // 8. obj.next() Generator 오브젝트가 iterator 오브젝트이므로 next() 함수를 호출 할 수 있으며 이때 함수 코드가 실행 됨
  • Generator 오브젝트는 iterator 오브젝트
  • 함수 코드 실행

    • Generator 오브젝트의 메소드를 호출 할 때

3. function* 표현식

  • function* 다음에 함수 이름 작성은 선택

    • 일반적으로 함수 이름을 작성하지 않음
    • function* 왼쪽에 변수를 선언하며 변수 이름이 함수 이름이 됨
    const sports = function* (one) {
    yield one;
    };
    
    const obj = sports(100);
    console.log(obj.next()); // {value: 100, done: false}
    
    // 1. const sports = function* (one) {} 표현식 형태의 제너레이터 함수 임
    // 2. 왼쪽 sports가 함수 이름이 됨
    // 문법 적으로는 * 다음에 함수 이름을 작성할 수 있지만 일반적으로는 사용하지 않음
  • 함수를 선언하는 형태만 다를 뿐

    • 다른 것은 function* 선언문과 같음