0

0

js中generator是什么

舞夢輝影

舞夢輝影

发布时间:2025-11-06 21:09:02

|

616人浏览过

|

来源于php中文网

原创

Generator函数可通过yield暂停并恢复执行,返回迭代器对象,每次next()调用返回value和done属性,实现惰性求值与双向通信,曾用于异步控制、生成无限序列等场景。

js中generator是什么

Generator 是 JavaScript 中一种特殊的函数,它能暂停执行,也可以在需要时恢复,还能多次返回值。和普通函数不同,普通函数一旦开始运行就会一直执行到结束,而 Generator 函数可以在执行过程中“中途暂停”,之后再从中断的地方继续。

Generator 函数的基本语法

定义一个 Generator 函数很简单,只需要在 function 关键字后加一个星号 (*),然后在函数体内使用 yield 来指定暂停点:

function* myGenerator() {
  console.log("第一步");
  yield "第一次暂停";
  console.log("第二步");
  yield "第二次暂停";
  return "结束";
}

调用这个函数并不会立即执行它的代码,而是返回一个 遍历器对象(Iterator)

const gen = myGenerator();
gen.next(); // 输出 "第一步",返回 { value: "第一次暂停", done: false }
gen.next(); // 输出 "第二步",返回 { value: "第二次暂停", done: false }
gen.next(); // 返回 { value: "结束", done: true }

yield 和 next 的交互机制

Generator 的核心是 yieldnext() 配合实现的双向通信:

  • yield 暂停函数,并把一个值返回给外部
  • next() 恢复执行,还可以传入参数,作为上一个 yield 表达式的返回值

例子:

TP-COUPON 导购系统 免费版
TP-COUPON 导购系统 免费版

自从百度屏蔽淘宝客网站、淘宝抛弃淘宝客之后,个人站长集体陷入了恐慌之中。此时,什么值得买网的异军突起引起了广大个人站长的极大关注。做一个什么值得买一样的导购网站成了众多个人站长的一致心愿! TP-COUPON 导购系统 即是让个人站长实现此心愿的绝佳选择! 欢迎个人站长选用。V1.1版 更新记录:1.修正请求时查询淘宝店铺错误的bug2.删除一些无用的代码

下载

function* sayHello() {
  const name = yield "请输入名字";
  console.log("你好," + name);
}

const g = sayHello();
g.next(); // { value: "请输入名字", done: false }
g.next("小明"); // 输出 "你好,小明",{ value: undefined, done: true }

应用场景

虽然现在异步主流用 async/await,但 Generator 曾经被广泛用于:

  • 手动控制异步流程(配合 co 库等)
  • 生成无限序列(比如斐波那契数列)
  • 状态机管理
  • 惰性求值,逐个生成数据,节省内存

例如生成斐波那契数列:

function* fibonacci() {
  let a = 0, b = 1;
  while (true) {
    yield a;
    [a, b] = [b, a + b];
  }
}

const fib = fibonacci();
fib.next().value; // 0
fib.next().value; // 1
fib.next().value; // 1
fib.next().value; // 2

基本上就这些。Generator 提供了一种更灵活的函数控制方式,虽然日常开发中直接使用的场景不多,但理解它有助于深入掌握 JS 的异步机制和迭代器原理。不复杂但容易忽略。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

94

2023.09.25

c语言const用法
c语言const用法

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

530

2023.09.20

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

513

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5306

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

481

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

31

2026.01.28

热门下载

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

精品课程

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

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

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

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