javascript生成器函数通过function定义并用yield暂停执行,调用后返回生成器对象,需手动调用next()启动;每次next()返回{value, done}对象,支持传参、错误处理及yield委托,适用于惰性求值、异步流程和自定义迭代等场景。

JavaScript 的生成器(Generator)函数是一种能暂停和恢复执行的特殊函数,核心在于「按需产出、惰性求值」——它不一次性算完所有结果,而是在每次调用 next() 时才执行到下一个 yield,适合处理大数据流、异步流程或自定义迭代逻辑。
怎么定义和调用 Generator 函数
定义时在 function 关键字后加星号 *,函数体内用 yield 暂停并返回值:
function* numbers() { yield 1; yield 2; return 3; }- 调用
numbers()不会执行函数体,而是返回一个生成器对象(如gen) - 必须手动调用
gen.next()才开始执行,每调用一次,就运行到下一个yield或return
next() 返回值的结构和含义
每次 next() 都返回一个对象:{ value: ..., done: true|false }
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
value是yield后面表达式的值;若遇到return,则为return的值 -
done: false表示还没结束,还能继续调用;done: true表示函数已执行完毕 - 后续再调用
next(),value会是undefined,done保持true
支持双向通信和错误处理
next() 可传参,该参数会成为上一个 yield 表达式的返回值:
function* ask() { const name = yield "你叫什么?"; yield `你好,${name}!`; }const q = ask(); q.next().value // "你叫什么?"q.next("李四").value // "你好,李四!"
还可通过 throw() 向内部抛错,配合 try/catch 捕获;用 return() 提前终止并指定返回值。
常用实用场景
- 自定义迭代器:比如生成斐波那契数列,无限但按需计算
-
简化异步流程:配合
co库或手写 runner,让yield Promise实现类同步写法 -
委托执行:用
yield*把控制权交给另一个生成器,实现逻辑复用 -
状态机:每个
yield对应一个状态,next()触发状态迁移
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










