- yield*는 하나의 표현식입니다. 여기서 *는 yield와 함께 특별한 의미를 가집니다.
- ECMAScript 명세에 따르면, yield*는 "YieldExpression"의 한 형태로 정의됩니다.
- yield*는 뒤에 오는 제너레이터나 이터러블 의 각 값을 현재 제너레이터의 yield 지점으로 전달합니다.
이는 마치 해당 제너레이터나 이터러블의 모든 값을 현재 제너레이터 내에서 개별적으로 yield하는 것과 같은 효과를 냅니다.
1. ECMAScript 2015 언어 명세 (ECMA-262, 6th Edition):
https://www.ecma-international.org/ecma-262/6.0/#sec-generator-function-definitions
2.MDN Web Docs의 yield 문서:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield
function* gen1() {
yield 1;
yield 2;
}
function* gen2() {
yield* gen1(); // gen1의 모든 값을 yield
yield 3;
}
for (let value of gen2()) {
console.log(value);
}
// 출력:
// 1
// 2
// 3
function* | yield* |
해당 함수가 제너레이터 함수임을 선언 | 다른 제너레이터나 이터러블 객체에 제어를 위임(delegate)하는 역할 |
4. 제너레이터 객체 말고도, yield*는 다른 반복 가능한 객체도 yield 할 수 있습니다. ( 배열, 문자열 또는 arguments 객체 )
function* g3() {
yield* [1, 2];
yield* "34";
yield* Array.from(arguments);
}
let iterator = g3(5, 6);
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: "3", done: false }
console.log(iterator.next()); // { value: "4", done: false }
console.log(iterator.next()); // { value: 5, done: false }
console.log(iterator.next()); // { value: 6, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
5. yield* 는 구문이 아닌 표현입니다. 따라서 값으로 평가됩니다.
function* g4() {
yield* [1, 2, 3];
return "foo";
}
let result;
function* g5() {
result = yield* g4();
}
let iterator = g5();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true },
// g4() 는 여기서 { value: "foo", done: true }를 반환합니다
console.log(result); // "foo"
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/yield*
'JavaScript > AboutJS' 카테고리의 다른 글
[JavsScript] 함수의 합성과 데이터 파이프라인 2: pipe - 재사용 가능한 함수 파이프라인 만들기 (0) | 2024.10.11 |
---|---|
[JavsScript] 함수의 합성과 데이터 파이프 라인 1. go - 즉시 실행되는 함수 체인 만들기 (0) | 2024.10.11 |
[Javascript] Iterable, Iterator 프로토콜 (0) | 2024.09.26 |
[JavaScript ]CommonJS 모듈 ES 모듈 차이 (0) | 2024.08.26 |
[JavaScript] Closure (클로져) (0) | 2024.08.23 |