JavaScript 中的生成器函数是什么?以及它是如何运作的?

javascript 中的生成器函数是一种特殊类型的函数,可以在执行过程中暂停和恢复。它使用 function* 语法定义,并使用yield 关键字顺序生成值。

生成器函数的主要特征

用 函数* 定义:

function* generatorfunction(){  yield 1;  yield 2;  yield 3;  yield 4; }

2.返回一个迭代器

当调用生成器函数时,它不会立即执行。 相反,它返回一个迭代器对象。迭代器有一个 next() 方法,用于控制 执行。产量关键字:yield 关键字用于生成一个值并暂停生成器。当再次调用 next() 时,生成器从暂停的地方。

生成器函数示例:

function* generatorfunction(){   console.log("start");   yield 1;   console.log("resume");   yield 2;    console.log("end");}const gen = generatorfuntion();console.log(gen.next());console.log(gen.next());console.log(gen.next());

输出

start {value: 1, done: false}Resume{value: 2, done: false}End{Value: undefined, done: true}

它是如何运作的

next() 上的执行:当第一次调用next()时,生成器启动 执行并运行直到第一个yield。它返回对象{value,done},其中: value:yield产生的价值。done:一个布尔值,指示生成器是否已完成暂停和恢复。函数遇到yield时暂停执行。当再次调用 next() 时,它会从暂停处恢复。完成: 当生成器函数完成时,done 属性变为 是的。

以上就是JavaScript 中的生成器函数是什么?以及它是如何运作的?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1499908.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何将额外数据附加到 Apollo Server 上的 GraphQL 响应
上一篇 2025年12月19日 22:08:49
代码检查
下一篇 2025年12月19日 22:09:00

相关推荐

  • 北理工团队在利用挥发性固体添加剂构筑高效率铸态有机太阳能电池研究中取得重要进展

    北理工团队在利用挥发性固体添加剂构筑高效率铸态有机太阳能电池研究中取得重要进展北理工团队在利用挥发性固体添加剂构筑高效率铸态有机太阳能电池研究中取得重要进展北理工团队在利用挥发性固体添加剂构筑高效率铸态有机太阳能电池研究中取得重要进展北理工团队在利用挥发性固体添加剂构筑高效率铸态有机太阳能电池研究中取得重要进展

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 近日,北京理工大学化学与化工学院硕士研究生毛鹏在材料领域国际权威期刊《Materials Science and Engineering: R: Reports》(影响因子:31.6)发表了题为…

    2026年10月2日 • 用户投稿
    000
  • 苹果手机上的app怎么在电视上投屏看

    苹果手机上的app怎么在电视上投屏看苹果手机上的app怎么在电视上投屏看苹果手机上的app怎么在电视上投屏看苹果手机上的app怎么在电视上投屏看

    要将苹果手机应用投屏到电视,需要根据电视类型选择方法:智能电视:可通过 AirPlay 或第三方应用投屏。非智能电视:可通过 Apple TV、Chromecast 或 Lightning 转 HDMI 适配器投屏。 如何将苹果手机应用投屏到电视 iPhone手机投屏到电视的方法,取决于您的电视类型…

    2026年10月2日 • 用户投稿
    000
  • 深入理解JavaScript对象中的属性与方法:VSCode显示差异解析

    深入理解JavaScript对象中的属性与方法:VSCode显示差异解析深入理解JavaScript对象中的属性与方法:VSCode显示差异解析深入理解JavaScript对象中的属性与方法:VSCode显示差异解析深入理解JavaScript对象中的属性与方法:VSCode显示差异解析

    本文深入探讨JavaScript对象中函数作为属性值与ES6方法语法之间的区别,并解析为何集成开发环境(如VSCode)在显示上会将它们区分为“属性”和“方法”。我们将通过代码示例,阐明这两种定义方式的语法特征、语义差异以及工具层面的识别机制,帮助开发者更好地理解和利用JavaScript的对象特性…

    2026年10月2日 • 用户投稿
    000
  • 在 Java 中创建并填充 Shape 类型数组

    在 Java 中创建并填充 Shape 类型数组在 Java 中创建并填充 Shape 类型数组在 Java 中创建并填充 Shape 类型数组在 Java 中创建并填充 Shape 类型数组

    本文旨在指导开发者如何在 Java 中创建并填充 Shape 类型的数组。由于 Shape 本身是一个抽象类,因此数组需要填充其具体的子类实例,例如 Rectangle、Ellipse2D.Double 和 Line2D.Float 等。本文将提供代码示例,演示如何创建一个 Shape 数组,并使用…

    2026年10月2日 • 用户投稿
    100
  • MySQL MVCC 原理解析:为什么是并发控制的最佳选择?

    MySQL MVCC 原理解析:为什么是并发控制的最佳选择?MySQL MVCC 原理解析:为什么是并发控制的最佳选择?MySQL MVCC 原理解析:为什么是并发控制的最佳选择?MySQL MVCC 原理解析:为什么是并发控制的最佳选择?

    MySQL MVCC 原理解析:为什么是并发控制的最佳选择? 在关系型数据库中,数据的一致性和并发控制是至关重要的。MySQL作为最流行的关系型数据库管理系统之一,采用了MVCC(Multi-Version Concurrency Control,多版本并发控制)机制来实现并发控制。本文将深入解析M…

    2026年10月2日 • 用户投稿
    000
  • win10怎么开启卓越性能模式_Win10卓越性能电源模式开启教程

    win10怎么开启卓越性能模式_Win10卓越性能电源模式开启教程win10怎么开启卓越性能模式_Win10卓越性能电源模式开启教程win10怎么开启卓越性能模式_Win10卓越性能电源模式开启教程win10怎么开启卓越性能模式_Win10卓越性能电源模式开启教程

    首先通过PowerShell命令创建卓越性能模式,按下Win+S搜索PowerShell并以管理员身份运行,输入powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61后回车执行,成功后在电源选项中显示附加计划下选择卓越性能即可启用…

    2026年10月2日 • 用户投稿
    000
  • 如何使用Linux进行CPU利用率优化

    如何使用linux进行cpu利用率优化 摘要:在Linux系统中,优化CPU利用率可以提高系统性能和资源利用效率。本文将介绍一些常见的CPU利用率优化技巧,并给出相应的代码示例。 一、使用进程调度算法 修改进程调度策略:Linux系统默认使用完全公平调度(CFS)算法,可以根据实际需求修改调度策略。…

    2026年10月2日
    000
  • 《街头霸王》真人电影拳王晒训练照 从发型到样貌高度还原

    《街头霸王》真人电影拳王晒训练照 从发型到样貌高度还原《街头霸王》真人电影拳王晒训练照 从发型到样貌高度还原《街头霸王》真人电影拳王晒训练照 从发型到样貌高度还原《街头霸王》真人电影拳王晒训练照 从发型到样貌高度还原

    经典格斗游戏《街头霸王》即将再度搬上大银幕,全新真人电影已正式定档于2026年10月16日上映。近日,片中“拳王”一角的饰演者——知名说唱歌手柯蒂斯·“50美分”·杰克逊(curtis “50 cent” jackson)在社交媒体晒出了自己的训练照,照片中他神情凌厉、肌肉紧实,尤其是那标志性的发型…

    2026年10月2日 • 用户投稿
    000
  • 如何通过控制台(Console)调试运行时异常?

    如何通过控制台(Console)调试运行时异常?如何通过控制台(Console)调试运行时异常?如何通过控制台(Console)调试运行时异常?如何通过控制台(Console)调试运行时异常?

    控制台调试运行时异常的解决方法包括:1. 打开开发者工具并切换到console面板;2. 重现异常并查看错误信息,包括错误类型、消息及出错位置;3. 利用sources面板设置断点并单步调试,观察变量值;4. 根据调试结果修复代码并重新加载页面验证。此外,可使用debugger语句在代码中直接暂停执…

    2026年10月2日 • 用户投稿
    000
  • windows诊断策略服务未运行怎么办_诊断策略服务启动与修复方法

    windows诊断策略服务未运行怎么办_诊断策略服务启动与修复方法windows诊断策略服务未运行怎么办_诊断策略服务启动与修复方法windows诊断策略服务未运行怎么办_诊断策略服务启动与修复方法windows诊断策略服务未运行怎么办_诊断策略服务启动与修复方法

    首先检查诊断策略服务状态并手动启动,若无效则通过命令提示符重新注册服务,接着检查组策略设置确保未禁用诊断功能,最后使用SFC和DISM工具修复系统文件,完成修复后重启电脑。 如果您在使用Windows系统时发现诊断策略服务未运行,可能导致系统无法正常收集诊断信息或影响某些功能的正常使用。以下是针对该…

    2026年10月2日 • 用户投稿
    200
  • 幕布多设备同步设置与问题解决方法

    幕布多设备同步设置与问题解决方法幕布多设备同步设置与问题解决方法幕布多设备同步设置与问题解决方法幕布多设备同步设置与问题解决方法

    首先确认所有设备登录同一幕布账户,再检查网络连接与权限,通过下拉刷新手动同步,清除缓存并重启应用,最后更新至最新版本以解决多设备间内容无法实时同步的问题。 如果您在使用幕布时遇到多设备间内容无法实时同步的问题,可能是由于网络连接、应用设置或账户状态导致的。以下是解决此问题的步骤: 本文运行环境:iP…

    2026年10月2日 • 用户投稿
    200
  • 创建并填充 Java Shape 类型数组的教程

    创建并填充 Java Shape 类型数组的教程创建并填充 Java Shape 类型数组的教程创建并填充 Java Shape 类型数组的教程创建并填充 Java Shape 类型数组的教程

    本文旨在指导开发者如何在 Java 中创建和填充 Shape 类型的数组。由于 Shape 本身是抽象类,因此需要使用其具体的子类来填充数组。我们将提供一个示例,演示如何使用 Rectangle、Ellipse2D.Double 和 Line2D.Float 等子类来填充 Shape 数组。 创建 …

    2026年10月2日 • 用户投稿
    000
  • Alienware电脑死机时显示错误代码怎么修?详细操作步骤

    Alienware电脑死机时显示错误代码怎么修?详细操作步骤Alienware电脑死机时显示错误代码怎么修?详细操作步骤Alienware电脑死机时显示错误代码怎么修?详细操作步骤Alienware电脑死机时显示错误代码怎么修?详细操作步骤

    遇到Alienware死机并显示错误代码时,首先强制重启并反复按E键进入修复模式,输入break=mount后执行blkid查看分区,使用fsck -y逐一修复各系统分区,完成后重启;若仍无法解决,通过U盘启动进入Windows恢复环境,依次运行bootrec /fixmbr、bootrec /fi…

    2026年10月2日 • 用户投稿
    200
  • 10月XGP阵容强势来袭!八款首发包括《忍者龙剑传4》等大作

    10月XGP阵容强势来袭!八款首发包括《忍者龙剑传4》等大作10月XGP阵容强势来袭!八款首发包括《忍者龙剑传4》等大作10月XGP阵容强势来袭!八款首发包括《忍者龙剑传4》等大作10月XGP阵容强势来袭!八款首发包括《忍者龙剑传4》等大作

    2025年10月将成为xbox game pass订阅服务的重磅月份,届时将有八款游戏在发布当天直接登陆xgp阵容,其中三款作品出自xbox游戏工作室之手。这一举措延续了2025年xgp始终坚持的核心策略:为玩家提供首发即享的高品质游戏体验。值得一提的是,截至目前,2025年评分最高的三款游戏均已在…

    2026年10月2日 • 用户投稿
    000
  • 理解VSCode中JavaScript对象属性与方法的显示差异

    理解VSCode中JavaScript对象属性与方法的显示差异理解VSCode中JavaScript对象属性与方法的显示差异理解VSCode中JavaScript对象属性与方法的显示差异理解VSCode中JavaScript对象属性与方法的显示差异

    VSCode对JavaScript对象中函数成员显示为“属性”或“方法”的差异,并非源于JavaScript运行时的本质区别,而是基于ES6引入的不同函数定义语法(函数表达式作为属性值 vs. 方法简写)以及IDE(如TypeScript语言服务)的智能解析和语义识别,旨在提供更清晰的代码提示和视觉…

    2026年10月2日 • 用户投稿
    000
  • 通义千问怎样制定学习计划?个性化指令设置指南​

    通义千问怎样制定学习计划?个性化指令设置指南​通义千问怎样制定学习计划?个性化指令设置指南​通义千问怎样制定学习计划?个性化指令设置指南​通义千问怎样制定学习计划?个性化指令设置指南​

    要利用通义千问进行高效学习,需制定个性化学习计划并掌握有效指令。1.明确学习目标,如掌握python编程,并将目标拆解为学习基础语法、常用库、小型项目等小任务;2.细化指令,如要求提供具体知识点资料及示例代码,推荐适合的项目并附简介和框架;3.根据学习风格定制,如增加练习题或详细讲解;4.持续反馈,…

    2026年10月2日 • 用户投稿
    000
  • 首辆小米SU7出租车司机被举报 原因:同行认为其“太卷”

    首辆小米SU7出租车司机被举报 原因:同行认为其“太卷”首辆小米SU7出租车司机被举报 原因:同行认为其“太卷”首辆小米SU7出租车司机被举报 原因:同行认为其“太卷”首辆小米SU7出租车司机被举报 原因:同行认为其“太卷”

    青海省德令哈市一位出租车司机王师傅,于2025年9月17日将新购入的小米SU7用作运营车辆,此举使其成为全国首位小米SU7出租车运营者。然而,这一创新之举在运营首日便引发了巨大争议,并遭到同行的集体抵制。 事件经过回顾 1、2025年9月17日,在青海省德令哈市,出租车司机王师傅正式将其个人购买的小…

    2026年10月2日 • 用户投稿
    200
  • java怎样创建和启动多线程程序 java多线程编程的基础操作方法

    java怎样创建和启动多线程程序 java多线程编程的基础操作方法java怎样创建和启动多线程程序 java多线程编程的基础操作方法java怎样创建和启动多线程程序 java多线程编程的基础操作方法java怎样创建和启动多线程程序 java多线程编程的基础操作方法

    java中创建和启动多线程程序的核心方法有两种:1. 实现runnable接口,将任务逻辑与线程解耦,便于任务复用和线程池管理;2. 继承thread类,直接定义线程行为,但受限于java单继承机制。应优先选择实现runnable接口,因其更符合单一职责原则且灵活性更高。启动线程必须调用start(…

    2026年10月2日 • 用户投稿
    100
  • windows怎么修改文件所有权_文件所有权获取与更改

    windows怎么修改文件所有权_文件所有权获取与更改windows怎么修改文件所有权_文件所有权获取与更改windows怎么修改文件所有权_文件所有权获取与更改windows怎么修改文件所有权_文件所有权获取与更改

    当Windows提示“拒绝访问”时,可通过三种方法获取文件所有权:1. 在文件属性的安全选项卡中更改所有者并替换子容器权限;2. 以管理员身份运行命令提示符,使用takeown和icacls命令获取并赋予权限;3. 修改注册表添加右键“获取所有权”快捷选项,实现快速操作。 如果您在Windows系统…

    2026年10月2日 • 用户投稿
    100
  • 如何使用Linux进行软件包安装和更新

    如何使用linux进行软件包安装和更新 一、引言Linux是一种常见的操作系统,它以其高度灵活、安全且稳定的特点而闻名于世。在Linux中,软件包的安装和更新是一项非常重要的任务。本文将介绍如何使用Linux进行软件包的安装和更新,并提供一些代码示例以供参考。 二、软件包管理器在Linux系统中,常…

    2026年10月2日
    000

发表回复

登录后才能评论
关注微信