JavaScript生成器是用function*声明的特殊函数,调用后返回迭代器,通过yield暂停/恢复执行并双向通信;适用于惰性计算、异步流程控制和状态机建模。

JavaScript生成器是一种特殊函数,能暂停和恢复执行,适合处理异步流程、大数据流或需要按需计算的场景。它的核心是yield关键字——它不是简单返回值,而是把函数执行“冻结”在当前点,交出控制权,等下次调用再从这里继续。
用function*语法声明(星号可紧贴function或函数名),调用后不立即执行,而是返回一个迭代器对象:
示例:
function* count() {
yield 1;
yield 2;
return 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: true }
yield像一个双向通信断点:
立即学习“Java免费学习笔记(深入)”;
yield时,函数暂停,把右侧表达式的值作为value返回给调用者next()时,函数从yield后 resume,且next(arg)传入的参数会成为本次yield表达式的返回值例子:接收外部输入
function* echo() {
const a = yield 'say something';
console.log('got:', a); // 第二次next传的值
yield 'done';
}
const it = echo();
console.log(it.next()); // { value: 'say something', done: false }
console.log(it.next('hello'));// 控制台打印 got: hello,返回 { value: 'done', done: false }
它天然适配迭代协议,也常用于简化异步逻辑:
Promise + next()实现类似async/await的效果(早期库如co就是这么做的)yield代表一个状态,next()触发状态迁移yield只能出现在生成器函数内部;不能在普通函数或箭头函数里用。生成器一旦return或抛错,后续next()都返回{ value: undefined, done: true }。另外,生成器对象本身不可调用,必须通过next()驱动。
以上就是javascript生成器是什么_yield关键字如何工作?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号