登录
首页 >  文章 >  前端

yield与yield*详解及使用方法

时间:2025-12-08 11:55:30 461浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

大家好,我们又见面了啊~本文《JS中yield与yield*详解与用法》的内容中将会涉及到等等。如果你正在学习文章相关知识,欢迎关注我,以后会给大家带来更多文章相关文章,希望我们能一起进步!下面就开始本文的正式内容~

yield用于暂停生成器函数并返回单个值,调用next()继续执行;yield*委托给其他生成器或可迭代对象,逐个产出其值。

js中yield和yield*表达式的介绍

在JavaScript中,yieldyield* 是用于生成器函数(Generator Functions)的关键字。它们让函数可以暂停执行、返回中间值,并在之后恢复执行,是实现惰性求值和控制流程的重要工具。

yield 表达式

yield 只能在用 function* 定义的生成器函数内部使用。它会暂停函数的执行,并向调用者返回一个值。当调用生成器的 next() 方法时,函数才会继续执行。

基本语法:

function* myGenerator() {
  yield '第一步';
  yield '第二步';
  return '结束';
}

使用示例:

const gen = myGenerator();
console.log(gen.next()); // { value: '第一步', done: false }
console.log(gen.next()); // { value: '第二步', done: false }
console.log(gen.next()); // { value: '结束', done: true }

每次调用 next(),函数从上次暂停的地方继续执行,直到遇到下一个 yield 或函数结束。

yield* 表达式

yield* 用于委托给另一个生成器或可迭代对象(如数组、字符串、Map等)。它会“展开”被委托的迭代器,逐个产出其中的值。

常见用法包括:

  • 组合多个生成器函数
  • 遍历嵌套结构
  • 复用已有生成逻辑

示例:

function* generatorA() {
  yield 'a';
  yield 'b';
}

function* generatorB() {
  yield* generatorA();
  yield 'c';
}

for (const val of generatorB()) {
  console.log(val); // 输出 a, b, c
}

也可以 yield* 普通可迭代对象:

function* gen() {
  yield* [1, 2, 3];
}
console.log([...gen()]); // [1, 2, 3]

yield 与 yield* 的区别

关键差异在于处理对象的方式:

  • yield:返回右侧表达式的值作为当前产出结果
  • yield*:遍历右侧的可迭代对象或生成器,把每个元素依次 yield 出去

比如 yield [1,2,3] 返回整个数组,而 yield* [1,2,3] 会分别产出 1、2、3。

基本上就这些。掌握 yield 和 yield* 能帮助你写出更灵活的数据流处理逻辑,尤其是在需要延迟计算或构建复杂迭代流程时特别有用。注意它们只能在生成器函数中使用,否则会报错。

到这里,我们也就讲完了《yield与yield*详解及使用方法》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>