生成器函数用function定义,调用返回迭代器;yield交出控制权并返回值,next()可传参赋值给yield表达式;yield委托其他迭代器;常用于自定义迭代、异步处理、无限序列和状态机。

生成器函数是 JavaScript 中一种特殊函数,能**暂停和恢复执行**,适合处理异步流程、大数据流或需要按需计算的场景;yield 是它的核心关键字,用于**交出函数控制权并返回一个值**,下次调用时从暂停处继续。
用 function*(星号紧贴 function)定义,调用时不立即执行,而是返回一个迭代器对象:
示例:
function* count() {
yield 1;
yield 2;
yield 3;
}
const it = count(); // 不执行函数体,只返回迭代器
console.log(it.next()); // { value: 1, done: false }
console.log(it.next()); // { value: 2, done: false }
console.log(it.next()); // { value: 3, done: false }
console.log(it.next()); // { value: undefined, done: true }
yield 表达式本身有返回值——即下一次 next(…) 调用时传入的参数。第一次 next() 传参无效(因无上一个 yield 等待接收):
立即学习“Java免费学习笔记(深入)”;
常见写法:
function* echo() {
let input = yield 'ready?';
console.log(input); // 输出 'got it!'
yield 'done';
}
const e = echo();
console.log(e.next()); // { value: 'ready?', done: false }
console.log(e.next('got it!')); // 控制台打印 'got it!',返回 { value: 'done', done: false }
yield* 用来“展开”另一个迭代器,把它的每个 yield 值依次产出,相当于把控制权暂时转交给它:
例子:
function* nums() {
yield 1; yield 2;
}
function* all() {
yield 'start';
yield* nums(); // 展开
yield 'end';
}
[...all()]; // ['start', 1, 2, 'end']
虽然 async/await 已成主流,但生成器仍有不可替代的用途:
基本上就这些。yield 不是魔法,本质是函数执行权的让渡与回收,理解这一点,用起来就不容易卡壳。
以上就是什么是生成器函数_javascript中yield关键字怎么用?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号