讲师中心 微信公众号
AI工具推荐 视频效率加速

什么是JavaScript中的生成器函数_如何使用yield控制执行流程?

风墨姑娘_5648

风墨姑娘_5648

发布时间:2025-12-25 13:22:02

|

981人浏览过

|

来源于php中文网

原创

生成器函数是用 function* 声明的特殊函数,调用返回生成器对象(实现迭代器协议),首次调用 next() 启动并暂停于 yield;yield 控制执行流,返回值并保留状态,后续 next() 可传参作为上个 yield 的返回值;适用于自定义迭代、异步流程简化和协程调度;return 终止迭代,throw() 可抛错捕获,生成器对象不可重用。

什么是javascript中的生成器函数_如何使用yield控制执行流程?

生成器函数是 JavaScript 中一种特殊的函数,它能暂停和恢复执行,配合 yield 关键字实现按需产出值,天然支持惰性求值和迭代逻辑的自定义。

生成器函数的基本定义与调用方式

生成器函数用 function* 语法声明,调用时不会立即执行,而是返回一个生成器对象(Generator Object),该对象实现了迭代器协议(有 next() 方法)。

  • 定义时函数名前加星号:function* myGenerator() { ... }
  • 调用后得到的是可迭代对象,不是普通函数返回值
  • 首次调用 next() 才开始执行,直到遇到第一个 yield 暂停

yield 如何控制执行流程

yield 是生成器内部的暂停点。每次调用 next(),函数从上次暂停处继续运行,直到下一个 yield 或函数结束。

Java 接口排错助手
Java 接口排错助手

在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。

下载
  • yield 表达式 会把右侧值作为 next() 返回结果的 value 属性
  • 执行暂停,函数状态(作用域、执行位置等)被保留
  • 再次调用 next() 时,可传入参数,该参数会成为上一个 yield 表达式的返回值(即 yield 左侧接收值)

生成器的典型使用场景

生成器适合需要分步、可控、可中断的逻辑,比如手动控制迭代、模拟异步流程、构建状态机或处理大数据流。

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

  • 自定义迭代器:让对象支持 for...of,例如遍历树结构或斐波那契数列
  • 异步流程简化:配合 co 库或手写 runner,用同步风格写异步逻辑(async/await 的前身思路)
  • 协程式任务调度:多个生成器交替执行,实现轻量级协作式多任务

注意 return 和 throw 的行为

生成器中 return 会终结迭代,next() 返回 { value: xxx, done: true };调用 throw() 会在暂停位置抛出错误,可被内部 try...catch 捕获。

  • return 后再调用 next(),始终返回 { value: undefined, done: true }
  • throw() 若未被捕获,会向上传递并终止生成器
  • 生成器对象不可重用,一旦 done: true,后续所有方法调用都返回 { value: undefined, done: true }

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
undefined是什么
undefined是什么

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

12145

2023.07.31

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

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

5527

2024.08.14

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

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

2516

2025.12.25

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

3380

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

574

2023.10.07

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

60

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

40

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

160

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

140

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn