首页 > web前端 > js教程 > 正文

javascript生成器是什么_yield关键字如何工作?

夢幻星辰
发布: 2025-12-22 19:06:42
原创
804人浏览过
JavaScript生成器是用function*声明的特殊函数,调用后返回迭代器,通过yield暂停/恢复执行并双向通信;适用于惰性计算、异步流程控制和状态机建模。

javascript生成器是什么_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如何暂停与恢复?

yield像一个双向通信断点:

立即学习Java免费学习笔记(深入)”;

通义灵码
通义灵码

阿里云出品的一款基于通义大模型的智能编码辅助工具,提供代码智能生成、研发智能问答能力

通义灵码 304
查看详情 通义灵码
  • 遇到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在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号