加载中...

生成器函数是 ES6 引入的特殊函数,用 function* 声明,函数体内可用 yield 暂停执行并向外产出值。调用生成器函数不会立即执行函数体,而是返回一个生成器对象,每次调用其 next() 方法才执行到下一个 yield 处。
生成器同时实现了迭代器协议与可迭代协议,因此可直接用于 for...of、展开运算符等场合。它的独特之处在于双向通信:next(value) 传入的值会成为上一个 yield 表达式的结果,还可通过 throw() 与 return() 从外部注入异常或提前终止;yield* 可委托给另一个可迭代对象。
生成器天然适合表达惰性序列与无限序列;在 async/await 标准化之前,社区用生成器加执行器(如 co 库)模拟同步风格的异步流程,async/await 本质上就是这一模式的语法糖;Redux-Saga 用它编排副作用;Babel 也将 async 函数降级编译为生成器。
日常业务中直接使用不多,但它是理解 JS 协程式控制流与异步演进史的关键一环。

登录 后参与讨论
暂无讨论,来发表第一条评论吧