javascript生成器是什么_yield关键字有什么作用

17次阅读

javascript生成器是什么_yield关键字有什么作用

javaScript 生成器是一种能**暂停和恢复执行**的特殊函数,它不是一次性跑完,而是按需“走一步、停一步”,适合处理需要分段产出数据或控制流程的场景。核心在于 function* 声明方式和 yield 关键字的配合。

生成器函数怎么定义和使用

必须用 function*(星号紧贴 function 或函数名都可)声明,调用时不会立即执行,而是返回一个生成器对象——这个对象本身就是一个迭代器。

  • 生成器对象自带 next() 方法,每次调用就推进到下一个 yield 或函数结束
  • 每次 next() 返回形如 { value: ..., done: true/false } 的对象
  • 所有 yield 值都会被依次产出;return 的值也会出现在 value 中,但 done 变为 true

yield 是什么,它不是 return

yield 是生成器的“暂停开关”:它交出一个值,同时冻结当前函数的所有状态(变量、执行位置等),等待下一次 next() 唤醒。

  • 它不终止函数,只暂停;而 return 会立刻退出
  • yield 后面的表达式是惰性求值的——只有调用 next() 时才计算
  • 它可以接收外部传入的数据:gen.next('hello') 中的 'hello' 会成为上一个 yield 表达式的返回值,实现双向通信

生成器本质是可迭代对象

生成器对象自动实现了 symbol.iterator 接口,因此能直接用于:

立即学习Java免费学习笔记(深入)”;

  • for...of 循环(但注意:return 值不会被循环捕获)
  • 展开运算符[...myGenerator()]
  • 数组解构:const [a, b] = myGenerator();

yield* 用于委托迭代

当一个生成器需要复用另一个生成器或遍历数组/字符串可迭代对象时,用 yield* 更简洁:

  • yield* anotherGenerator() 直接把控制权交给对方,逐个产出它的 yield
  • yield* [1, 2, 3] 等价于手动写三个 yield,适合扁平化嵌套结构
text=ZqhQzanResources