Generator 函数 - 基本概念

ES6 Generator函数 以后,每次调用遍历器对象的 next 方法,就会返回一个有着 value 和 done 两个属性的对象。这里需要注意,一旦 next 方法的返回对象的 done 属性为 true , for...of 循环就会中止,且不包含该返回对象,所以上面代码的 return 语句返回的 6 ,不包括在 for...of 循环之中。(3)如果没有再遇到新的 yield 表达式,就一直运行到函数结束,直到 return 语句为止,并将 return 语句后面的表达式的值,作为返回的对象的 value 属性值。 阅读详情

1.简介

基本概念

Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同。
Generator函数有多种理解角度。从语法上,首先可以把它理解成,Generator函数一个状态机,封装了多个内部状态。
执行Generator函数会返回一个遍历器对象,也就是说,Generator函数除了状态机,还是一个遍历器对象生成函数。
形式上,Generator函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号,二是,函数体内部使用yield语句,定义不同的内部状态。(yield语句在英语里的意思就是“产出”)

function* helloWorldGenerator(){
  yield 'hello';
  yield 'world';
  return 'ending';
}
var hw = helloWorldGenerator();

上面代码定义了一个Generator函数helloWorldGenerator,它内部有2个yield语句,即该函数有三种状态:hello,world和return语句。

Generator函数的调用方法和普通函数一样,但不同的是,调用Generator函数后,该函数并不知晓,返回是也不是函数运行结果,而是一个指向内部状态的指针对象,也就是遍历器对象。
必须调用遍历器对象的next方法,似的指针移动到下一个状态。也就是说,每次调用next方法,内部指针就从函数头部或上一次定下来的地方开始执行,直到遇到下一个yield语句(或return语句)为止。换言之,Generator函数是分段执行的,yield语句是暂停执行的标记,而next方法可以恢复执行。

hw.next()
// {value:'hello', done:false}
hw.next()
// {value:'world', done:false}
hw.next()
// {value:'ending', done:false}
hw.next()
// {value:undefined, done:true}

上面代码一共调用了4次next方法。

总结一下,调用Generator函数,返回一个遍历器对象,代表Generator函数的内部指针。以后每次调用遍历器对象的next方法,就会返回一个有着value和done两个属性的对象。
value属性表示当前的内部状态的值,是yield语句后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束。

Apache Kafka Connect任意文件读取漏洞(CVE-2025-27817) 由于Apache Kafka客户端未对用户输入进行严格验证和限制,未经身份验证的攻击者可通过构造恶意配置读取环境变量或磁盘任意内容,或向非预期位置发送请求,提升REST API的文件系统/环境/URL访问权限。(CVE-2025-27817) 阅读详情

相关推荐

adb 通信协议分析以及实现 (三) (Adb 网络通信部分解析)

这篇文章说下adb 和adb 服务进程之间通信的socket 协议。  adb 服务进程启动之后,会监视本地的5037 端口,使用的是TCP 协议,所以adb 发送的命令其实就是往本地的5037 端口发送数据,做过网络编程的都知道,本机可以用127.0.0.1 ip地址。 有了ip 地址和端口号socket 通信就没问题 1)  命令发送方式      

inforecovvery的博客 2868

iOS开发:2分钟快速集成支付宝快捷支付

本文介绍了iOS快速集成支付宝支付的方法,本文中介绍的方法是经过一次封装,因此配置完成之后调用仅需一行代码即可支付宝支付,非常的方便,希望大家喜欢。我只是根据官方的文档,对支付宝的SDK做了进一步封装,其中密钥的生成很简单,需要看官方的文档,官方的文档我在工程附件目录里也有一份,如果需要马上集成,没工夫研究的话,可以大致看一下密钥的生成即可,其...

weixin_33733810的博客 182

2025年VSCode AI插件实战:如何用Devika+Continue+Tabby三件套10倍提升开发效率

本文详细介绍了2025年VSCode AI插件Devika、Continue和Tabby的三件套组合,如何通过智能开发工作流10倍提升开发效率。从项目架构生成到上下文感知辅助,再到本地化智能编码,这套方案实现了从需求分析到代码生成的全流程自动化,特别适合中大型项目开发。

weixin_26911099的博客 269

Generator函数

1、什么是 Generator 函数 在Javascript中,一个函数一旦开始执行,就会运行到最后或遇到return时结束,运行期间不会有其它代码能够打断它,也不能从外部再传入值到函数体内 而Generator函数(生成器)的出现使得打破函数的完整运行成为了可能,其语法行为与传统函数完全不同 Generator函数是ES6提供的一种异步编程解决方案,形式上也是一个普通函数,但有几个显著的特征: function关键字与函数名之间有一个星号 “*” (推荐紧挨着function关键字) 函数体内使用 yi

qq_43239667的博客 1万+

NE564锁相环FM解调电路设计:10.7MHz中频实测与3种失真优化方案

本文详细解析了NE564锁相环在10.7MHz中频FM解调电路中的设计与优化方案。通过分析锁相环技术基础、电路架构设计及典型失真问题,提供了3种有效的失真优化方法,包括限幅增强、VCO频偏补偿和环路滤波优化,显著提升解调性能。文章还涵盖了PCB布局要点和系统测试验证,为高频电子线路设计提供实用参考。

weixin_33314040的博客 349

基于STM32的馆藏文物保存环境监测系统设计与实现

针对馆藏文物保存环境中温湿度、光照、有害气体等参数波动易导致文物损坏的问题,本文设计了一种基于STM32微控制器的馆藏文物保存环境监测系统。该系统以STM32L431RCT6为核心,集成高精度传感器实现多参数实时采集,通过有线与无线结合的通信方式构建监测网络,具备数据存储、异常预警、远程监控等功能。测试结果表明,系统温湿度测量精度分别达±0.2℃、±2%RH,光照与有害气体检测误差≤5%,可满足文物保存环境的高精度监测需求,为文物保护提供科学的数据支撑。

m0_74026776的博客 1541

ES6异步方案——生成器Generators/yield

一、Generator函数简介   generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。   ES6定义generator标准时借鉴了Python的generator的概念和语法。 1、理解Generator函数   Generator函数有多种理解角度。 function* gen() { yield 1; y...

hqs2212586的专栏 508

Skynet 框架面试题

本文整理了游戏服务端开发面试中 Skynet 框架的高频考点,涵盖底层架构、消息派发、协程调度、网络 I/O、harbor 跨机通信、内存管理、socket 处理、阻塞操作、错误处理等核心内容。全面覆盖 Skynet 框架的原理、使用和实战问题,追求深入准确,拒绝八股文。

小赖的博客 381

Generator 函数

这里写目录标题基本概念 基本概念 执行 Generator 函数会返回一个遍历器对象,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。 Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”) function* helloWorldGenerator() { yiel

m0_46404694的博客 1080

告别效率低谷:用ADS仿真手把手教你设计高回退Doherty功放(附1:2非对称案例)

本文详细解析了如何使用ADS仿真设计高回退Doherty功放,特别针对1:2非对称架构进行深入探讨。通过优化功率分配比、峰值管开启阈值等关键参数,显著提升功放在9dB回退点的效率至75%以上,适用于LTE等高PAPR信号场景。文章还提供了ADS仿真环境搭建、参数优化及工程化设计的实用技巧。

weixin_33743248的博客 453

最全卷积总结篇(分组、深度可分离、空洞、转置等)

分组卷积(Group Convolution)是一种卷积操作方式,它最早在AlexNet中引入,并在深度学习中被广泛使用,尤其是在高效模型设计(如MobileNet和ResNeXt)中。分组卷积通过将输入特征通道分为若干组,并在每组内单独进行卷积操作,可以减少计算复杂度和参数量,同时有效利用模型的结构特性。分组卷积的工作原理通道分组:输入特征图的通道图为C_in,输出特征图的通道数为C_out,将每组的C_in和C_out分为G组,每组的通道数为C_in/G和C_out/G。组内卷积。

qq_44815135的博客 4217

es6中的generator函数详解

generator函数 1.generator是什么: generator是一个迭代生成器,其返回值为迭代器(lterator),是ES6标准引入的新的数据类型,它借鉴于Python中的generator概念和语法; 迭代器协议: 定义了一种标准的方式来产生一个有限或无限序列的值; 当一个对象被认为是一个迭代器时,它实现了一个 next() 的方法,next()返回值如下: { done:tr...

田兴的博客 5903

利用ADS建立MIPI D-PHY链路仿真流程

由于MIPI D-PHY的速率并不算高,因此,PCB设计难度通常不大,主要做好差分线的等长、阻抗的连续性、端口处的阻抗优化以及控制好走线的长度,拿到满意的结果还是较为轻松的,最后,建立流程化的仿真工程文件,可以保存为模板,方便日后的设计复用,非常方便。

一只豌豆象的博客 3569

ES6 入门教程 20 Generator 函数的异步应用 20.1 传统方法 & 20.2 基本概念 & 20.3 Generator 函数

ES6 入门教程 20 Generator 函数的异步应用 20.1 传统方法 & 20.2 基本概念 & 20.3 Generator 函数

代码改变世界 237

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Generator函数的基本概念

基本概念 异步 ES6 所谓"异步",简单说就是一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段。 比如,有一个任务是读取文件进行处理,任务的第一段是向操作系统发出请求,要求读取文件。然后,程序执行其他任务,等到操作系统返回文件,再接着执行任务的第二段(处理文件)。这种不连续的执行,就叫做异步。

歪脖先生的博客 417

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

从零开始学_JavaScript_系列(53)——Generator函数(1)基本概念和示例

1、Generator基本概念注:【遍历器】和【迭代器】是一个意思。1.1、表象: 函数名有个星号(就是乘号*); 函数体内部使用yield表达式(yield翻译成中文:产生); 函数调用后返回值是一个遍历器对象,该对象可以调用next方法遍历yield表达式返回的值; 函数内部可有返回值,也可以没有(这个影响的是遍历器遍历到第一次done为true时,value的值是什么); 函数执行后并不直接执

qq20004604的博客 592

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Generator函数的语法和应用

简介 基本概念 状态机,封装了多个内部状态; 返回一个遍历器对象,通过改对象可以一次遍历Generator函数内部的每一个状态 带*号,yeild表达式定义不同的内部状态; 调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,也就是遍历器对象; Generator 函数是分段执行的,yield表达式是暂停执行的标记,而next方法可以恢复执...

weixin_43818482的博客 161

Generator 实现

Generator 实现 Generator 是 ES6 中新增的语法,和 Promise ⼀样,都可以⽤来异步编程 // 使⽤ * 表示这是⼀个 Generator 函数 // 内部可以通过 yield 暂停代码 // 通过调⽤ next 恢复执⾏ function* test() { let a = 1 + 2; yield 2; yield 3; } let b = test(); console.log(b.next()); // > { value: 2, done: false }

weixin_42677762的博客 316

Generator函数基础

基本概念英文意思为 “生成器”。 generator函数是es6提供的一种异步编程解决方案,语法行为与传统函数完全不同。从状态上,首先我们把他理解成一种状态机,封装了多个内部状态。另外执行generator函数胡返回一个遍历对象,就是说,generator函数还是一个遍历器对象生成函数,可以一次遍历函数中的每一个状态。 generator函数的两个特征function命令与函数名之间有一个星号; 函

宝宝是个小气鬼i 419

ES6 中的 generator 函数究竟是什么

ES6 中的 generator 函数介绍

qq_42880714的博客 1445

【JavaScript的ES6语法】8、generator函数基础

上一篇我们学习完Promise之后,本篇我们来学习generator函数。 generator是ES6引入的一个新的函数,动词“generate”的意思是“生成”,那么名词“generator”的意思就是“生成器”。 它是用来干什么的呢?通过其字面意思我们应该可以猜到,它是可以生成很多东西的函数,是这样吗? 一、generator函数介绍和使用 generator函数在ES6中和其他函数的最大不同就是,普通的函数一旦调用后就会执行到底,而generator函数可以控制在中间停止运行,等待新指令放行后继续

程序猿之洞 892

【ES6】Generator函数详解

【ES6】Generator函数详解一、Generator函数简介基本概念函数写法yield关键字介绍二、next方法的参数三、for...of循环四、关于普通throw()与Generator的throw()五、Generator函数的应用【很重要】1、延迟函数2、简化函数的flag(Generator与状态机)3、异步操作的同步化表达4、函数的自动化控制【心生佩服】 引言:从Generato...

十一月廿七风雨大作 7106
上一篇: 修复在子对象中修改this.$global.version的问题
下一篇: 首先灌入一万条数据(利用msyql存储过程)
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值