yield* 是为解决生成器间嵌套迭代的自然衔接问题而设计的委托迭代机制,可透明转发 next()/throw()/return() 到任意可迭代对象,并自动管理状态与错误传播。

JavaScript 中的生成器委托(yield*)不是为了“简化代码”或“让语法更酷”,而是为了解决生成器函数之间**嵌套迭代逻辑的自然衔接问题**。它让一个生成器可以“透明地把控制权交给另一个可迭代对象”,包括其他生成器、数组、字符串、Map、Set,甚至自定义的迭代器。
yield* 是“委托迭代”,不是“调用并返回”
yield 是暂停并产出一个值;yield* 是暂停当前生成器,并把后续所有 next() 调用“转发”给右侧的可迭代对象,直到它耗尽,再回到原生成器继续执行。
比如:
function* genA() {
yield 'a';
yield 'b';
}
<p>function<em> genB() {
yield 1;
yield</em> genA(); // ← 这里不是返回 genA() 对象,而是逐个 yield genA 的每个值
yield 2;
}</p><p>[...genB()] // [1, 'a', 'b', 2]
登录后复制
如果没有 yield*,你得手动循环 genA() 并一个个 yield,既啰嗦又丢失了迭代状态的自动管理。
立即学习“Java免费学习笔记(深入)”;
标签: javascript java ai 键值对 可迭代对象 为什么
还木有评论哦,快来抢沙发吧~