yield关键字暂停函数执行并返回表达式值封装的迭代器对象,供next()获取;可被for...of自动遍历;暂停时保留上下文,支持多次恢复执行。

yield 关键字通过暂停函数执行,并把紧跟其后的表达式值作为 当前产出结果 返回给调用方。它不是直接“输出”到控制台,而是将值封装进一个标准迭代器对象({ value: ..., done: false }),供 next() 方法接收。
yield 产出数据的基本方式
yield 后面跟任意表达式,该表达式的求值结果就是本次 next() 调用返回的 value:
-
yield 42→ 下次next()返回{ value: 42, done: false } -
yield "hello"→ 返回{ value: "hello", done: false } -
yield x + y→ 返回计算后的值,比如{ value: 7, done: false } -
yield(不带值)→ 等价于yield undefined,返回{ value: undefined, done: false }
yield 产出的数据由 next() 暴露
生成器函数本身不返回数据,只有调用生成器对象的 next() 方法,才会触发 yield 执行并拿到结果:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 第一次
next():从函数开头运行,直到遇到第一个yield,返回它的值 - 后续
next():从上一个yield暂停处继续,走到下一个yield或return -
return语句的值也会被产出(done: true时的value)
yield 可以配合 for...of 自动遍历
因为生成器对象是可迭代的,yield 产出的每个值都能被 for...of 捕获,无需手动调用 next():
function* nums() { yield 1; yield 2; yield 3; }-
for (const n of nums()) { console.log(n); }→ 依次打印 1、2、3 - 循环内部自动调用
next(),直到done: true
注意:yield 不是 return,它可恢复执行
yield 暂停后,函数上下文(变量、作用域、执行位置)全部保留;下一次 next() 会从中断点继续,而不是重新开始:
function* demo() { let a = 1; yield a++; yield a++; return a; }const g = demo(); g.next(); // { value: 1, done: false }g.next(); // { value: 2, done: false } → a 已变成 2,再自增得 3g.next(); // { value: 3, done: true } → return 的 a 是 3










