728x90
function* 선언은 generator function을 정의 하는데 이 함수는 Generator 객체 (Object [Generator] {}) 를 반환합니다.
Generator함수는 호출되어도 즉시 실행되지 않고 Iterator 객체를 반환하는데
이때 Iterator객체에 next() 메서드를 이용해서 호출하면 Generator 함수가 실행되어 yield문이 있는 곳까지 진행되고
yield문은 반환값 value 속성과 Generator함수 안의 모든 yield문의 실행 여부를 표시하는 boolean타입 done 을 반환합니다.
function* foo(){ // generator 함수
var index = 0;
while(index <= 2)
yield index++;
}
var iterator = foo();
console.log(iterator); // <- 반환객체 Object [Generator] {}
console.log(iterator.next()); // {value: 0, done: false}
console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: undefiend, done: true}
위 코드의 결과를 보듯이 generator는 이터러블(iterable)입니다.
따라서 for..of 반복문을 통해서 값을 얻을 수 있습니다.
var generator = foo()
for(let value of generator){
console.log(value);
}
// 결과
// 0
// 1
// 2
참고 1 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/function*
function* - JavaScript | MDN
function* 선언 (끝에 별표가 있는 function keyword) 은 generator function 을 정의하는데, 이 함수는 Generator 객체를 반환합니다.
developer.mozilla.org
참고 2 : https://ko.javascript.info/generators
제너레이터
ko.javascript.info