新闻中心

什么是生成器函数_j*ascript中yield关键字怎么用?

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

什么是生成器函数_javascript中yield关键字怎么用?

生成器函数是 J*aScript 中一种特殊函数,能**暂停和恢复执行**,适合处理异步流程、大数据流或需要按需计算的场景;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 怎么交出值并接收外部传入的值?

yield 表达式本身有返回值——即下一次 next(…) 调用时传入的参数。第一次 next() 传参无效(因无上一个 yield 等待接收):

  • yield 1 → 返回 {value: 1, done: false},同时暂停
  • it.next('hello') → 'hello' 成为当前 yield 表达式的值,继续执行

常见写法:

Ghiblio Ghiblio

专业AI吉卜力风格转换平台,将生活照变身吉卜力风格照

Ghiblio 157 查看详情 Ghiblio
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* 用来“展开”另一个迭代器,把它的每个 yield 值依次产出,相当于把控制权暂时转交给它:

  • yield* arr → 等价于对 arr 的每个元素 yield 一次
  • yield* anotherGenerator() → 逐个产出另一个生成器的所有值

例子:

function* nums() {
  yield 1; yield 2;
}
function* all() {
  yield 'start';
  yield* nums(); // 展开
  yield 'end';
}
[...all()]; // ['start', 1, 2, 'end']

实际中生成器常用来做什么?

虽然 async/await 已成主流,但生成器仍有不可替代的用途:

  • 实现自定义迭代逻辑(比如树的深度优先遍历)
  • 配合 co 库或手写 runner 处理异步(早期 redux-saga 就基于它)
  • 生成无限序列(如斐波那契数列),靠 next() 按需取值,不爆内存
  • 状态机建模:每个 yield 代表一个稳定状态,next() 触发状态迁移

基本上就这些。yield 不是魔法,本质是函数执行权的让渡与回收,理解这一点,用起来就不容易卡壳。

以上就是什么是生成器函数_j*ascript中yield关键字怎么用?的详细内容,更多请关注其它相关文章!


# 遍历  # 上虞网站推广定制  # 河南农资网站建设方案  # 企业出海网站建设方案范文  # 豪君seo  # 印刷seo优化技术  # 邵阳网站优化方案分析师  # 临沧网站推广网络营销  # qq部落 seo  # 哈哈小说网站建设  # 如何在今日头条营销推广  # 解决问题  # 中文网  # 相关文章  # javascript  # 就不  # 返回值  # 按需  # 自定义  # 是怎样  # 迭代  # red  # 可迭代对象  # ai  # 大数据  # go  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 漫蛙漫画官方首页 漫蛙2漫画在线阅读入口  FullCalendar 自定义按钮样式定制指南  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  steam官方入口大全 steam账号注册及操作指南  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  Django表单验证失败时保留用户输入数据的最佳实践  蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源  一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法  C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  快手赚钱渠道_快手收益来源  在Go Martini框架中高效服务动态生成图像的实践指南  TikTok评论显示延迟如何处理 TikTok评论刷新优化方法  HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制  Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏  qq音乐在线播放入口_qq音乐电脑版登录链接  必由学登录入口 必由学官方网站在线访问链接  2026春节假期票务安排_2026春节放假购票指南  Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】  fishbowl官网免费版 fishbowl养鱼网站入口  小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】  4399免费游戏网址入口 4399小游戏免费入口点开即玩  在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  AO3网页版最新入口合集 Archive of Our Own在线访问指南  qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  优化Django表单:提交验证失败后保留用户输入  Node.js中HTML按钮与J*aScript函数交互的正确姿势  如何在Promise链中优雅地中断后续then执行  知音漫客官网漫画下载_知音漫客网页版阅读记录  蛙漫安全无毒 官方认证的绿色入口  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  必由学网页版入口 必由学官方平台直接访问  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  淘宝支付提示失败如何解决 淘宝支付流程优化方法  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  微信商城在哪里打开【步骤】  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  Lar*el 8 多关键词数据库搜索优化实践  如何使用纯J*aScript判断Input元素是否在特定类容器内  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  Typer应用中灵活处理命令行参数的令牌化与解析  海棠账号登录入口_登录海棠账户同步阅读记录  批改网学生版PC登录 批改网官网登录系统入口 

搜索