0

0

什么是生成器函数_JavaScript中yield关键字有什么用

幻影之瞳

幻影之瞳

发布时间:2026-01-12 18:55:02

|

688人浏览过

|

来源于php中文网

原创

生成器函数是能暂停执行的函数,它返回Generator对象而非直接返回值,通过function*定义并用yield产出值后挂起,每次next()调用恢复执行至下一个yield。

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

生成器函数是能暂停执行的函数

生成器函数不是普通函数,它运行时可以中途暂停、保存当前状态,并在后续调用中从暂停处继续。关键在于它返回一个 Generator 对象,而不是直接返回值。定义方式很明确:函数名前加 *,比如 function* myGen()const gen = function*() {}

yield 是生成器内部的暂停与产出指令

yield 不是返回值后结束,而是“产出一个值,然后挂起”。每次调用生成器对象的 next() 方法,函数会执行到下一个 yield 表达式,把右边的值作为 value 返回,并暂停;下次再调用 next(),才继续执行后续代码。

function* counter() {
  yield 1;
  yield 2;
  return 3;
}

const it = counter(); 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 右侧表达式只在 next() 被调用时求值,支持惰性计算
  • 首次调用 next() 才开始执行函数体,yield 之前的代码此时才运行
  • 传给 next(value) 的参数会成为上一个 yield 表达式的返回值(可用于双向通信)
  • yield 不能出现在普通函数、箭头函数或 async 函数中

常见误用:把生成器当普通函数调用

直接调用 counter() 不会得到 1,而是返回一个未启动的 Generator 对象。必须显式调用 next() 才触发执行。另一个典型错误是忽略 done 字段——循环遍历时若不检查 done === true,容易多走一次,拿到 { value: undefined, done: true }

  • 不要写 counter() 期望得到数字;要写 counter().next().value
  • for...of 会自动调用 next() 并忽略 return 语句产出的终值(即 return 3 中的 3 不会被遍历到)
  • yield* 用于委托另一个可迭代对象(如另一生成器、数组),注意它会展开整个迭代过程

实际用得上的场景其实很具体

生成器不是语法糖,它的价值集中在需要精确控制执行节奏的地方。比如实现状态机、处理异步流程(早期 co 库)、模拟协程、或构建无限序列(如斐波那契流)。

百度文心一格
百度文心一格

百度推出的AI绘画作图工具

下载

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

  • yield 实现分页请求:每次 next() 触发一次 fetch,结果通过 yield 吐出
  • 测试中模拟长时间运行任务:用 yield 暂停,方便注入断言或 mock 行为
  • 避免大数组一次性生成占用内存:生成器可按需产出下一个值,配合 take(100)工具轻松截取

真正难的不是写对 yield,而是判断「这里是否真的需要暂停语义」——多数循环、映射、过滤,用 map/filter 更直白;一旦涉及跨调用的状态保持或外部驱动的执行节奏,生成器才不可替代。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

521

2023.09.20

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

74

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

28

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

35

2025.11.27

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

4446

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

2933

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

188

2025.12.25

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

10

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.1万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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