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 表达式的返回值:
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(通过包装)能写出更清晰的逻辑。不复杂但容易忽略细节。
以上就是JavaScript生成器是什么_yield关键字怎么用?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1542241.html
微信扫一扫
支付宝扫一扫