👋 yield 분할 할당, for-of 반복
1. yield 분할 할당
function* sports() {
return [yield yield];
}
const obj = sports();
console.log(obj.next()); // {value: undefined, done: false}
console.log(obj.next(10)); // {value: 10, done: false}
const last = obj.next(20);
console.log(last); // {value: [20], done: true}
console.log(last.value); // [20]-
대괄호
[ ]안에 다수의yield작성return [yield yield];
-
next(),next(10)호출yield를 연속해서 작성한 것과 같음yield를 2개 모두 수행했으므로 더 이상 처리할yield가 없음
-
세 번째
next(20)호출- 파라미터 값 : 20
return [yield, yield]에서{value: [20], done: true}형태로 반환[20]처럼[ ]안에 파라미터 값 20을 넣어서 반환
console.log()에{value: Array(1)}형태로 표시되지만 가독성을 위해 편집 함
2. for-of 문으로 반복
function* sports(count) {
while (true) {
yield ++count;
}
}
for (let point of sports(10)) {
console.log(point);
if (point > 12) {
break;
}
}
// 11
// 12
// 13for-of문으로 제너레이터를 반복 호출-
처음
for-of문을 시작하면sports(10)으로 제너레이터 오브젝트를 생성함- 제너레이터 오브젝트에 10이 설정됨
- 생성한 제너레이터 오브젝트를 저장할 변수가 없으며 엔진 내부에 저장함
const engine = sports(10);과 같으며engine이 엔진 내부의 이름으로 가정함
-
다시
sports*()를 호출 함engine.next()와 같지만 반환 값이 다름while(true){ yield ++count }를 실행 함{value: 11, done: false}를 반환하지 않고value만point변수에 설정함
-
{done: true}로 종료 처리를 할 수 없으므로break;를 사용하여 종료시켜야 함
-
for-of블록을 실행함- 11을 출력 함
value값이 11이므로 다시for-of문을 수행while(true){ yield ++count}를 수행
-
이렇게
break;를 만날 때 까지- 반복하여
yield ++count;를 실행 함
- 반복하여