August 17, 2020
function*의 구조를 가지고 있다.generator함수 호출 시, 코드가 실행되는것이 아닌 실행을 처리하는 특별객체 generator객체를 반환하다.return으로 단 하나의 값을 반환하는것이 아닌, yield로 여러개의 결과값을 원하는 시기에 반환시킬 수 있다.next()는 generator의 주요 메소드로, next()호출시, 가장 가까운 yield문을 만날때까지 실행되고, 해당 값을 반환한다.next()의 반환값은 {done : boolean, value : any}의 형태이고, done=true는 반복종료. done=false일땐 value에 값이 저장된다.function* generateSequence(){
yield 1;
yield 2;
return 3;
}
const generator = generateSequence();
console.log(typeof generateSequence()); // object
const firstYield = generator.next();
console.log(firstYield); // {value : 1, done : false};
const secondYield = generator.next();
console.log(secondYield); // {value : 2, done : false};
const thirdYield = generator.next();
console.log(thirdYield); // {value : 3, done : true};next()를 보면 알 수 있듯이, generator는 iterator객체를 반환하는 iterable객체이다.const range = {
from : 1,
to : 5,
*[Symbol.iterator](){ // == [Symbol.iterator] : *function()
for(let value = this.from; value <= this.to; value++){
yield value;
};
}
};
console.log([...range]); // [1,2,3,4,5]Symbol.iterator를 통해 반환되는 객체는, next() 메소드를 갖고있어야하며 정해진 구성을 갖춰야 한다.generator를 통해 반환되는 값은, 위의 조건에 충족되기때문에 가능함.