JavaScript生成器是用function定义的特殊函数,返回迭代器对象;yield暂停执行并返回值,next()恢复并可传入参数;yield委托其他可迭代对象,支持按需计算与异步流程控制。

JavaScript生成器是一种特殊函数,能暂停和恢复执行,适合处理异步操作、大数据流或需要按需计算的场景。yield 是它的核心关键字,用来“交出”当前值并暂停函数,等下次调用再从暂停处继续。
生成器函数怎么定义?
在 function 关键字后加一个星号 *,就定义了一个生成器函数。它不会立即执行,而是返回一个迭代器对象:
function* count() {
yield 1;
yield 2;
yield 3;
}
调用 count() 不会输出数字,只返回一个可迭代的对象,比如 const it = count();
立即学习“Java免费学习笔记(深入)”;
yield 怎么工作?
每次调用迭代器的 .next() 方法,生成器就运行到下一个 yield 表达式,返回一个形如 { value: ..., done: ... } 的对象:
- it.next() → { value: 1, done: false }
- it.next() → { value: 2, done: false }
- it.next() → { value: 3, done: false }
- it.next() → { value: undefined, done: true }(已耗尽)
yield 可以接收外部传入的值
yield 不只是“往外抛”,还能“往里收”。下一次调用 .next(value) 时传的参数,会成为上一个 yield 表达式的返回值:
本文档主要讲述的是Python开发网站指南;HTML是网络的通用语言,一种简单、通用的全置标记语言。它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器 Python和其他程序语言一样,有自身的一套流程控制语句,而且这些语句的语法和其它程序语言类似,都有for, if ,while 类的关键字来表达程序流程。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
function* echo() {
let input = yield 'ready';
yield 'you said: ' + input;
}
使用示例:
const e = echo();
e.next(); // { value: 'ready', done: false }
e.next('hello'); // { value: 'you said: hello', done: false }
生成器可以委托其他生成器
用 yield* 可以把控制权“转交”给另一个可迭代对象(比如另一个生成器、数组、字符串),让它们依次产出值:
function* nums() { yield 1; yield 2; }
function* all() {
yield 'start';
yield* nums(); // 展开 nums 的所有 yield
yield 'end';
}
结果:'start' → 1 → 2 → 'end'
基本上就这些。yield 不是魔法,它让函数变成可中断的协作式流程,配合 for...of、扩展运算符([...gen()])、async/await(通过包装)能写出更清晰的逻辑。不复杂但容易忽略细节。









