在接触到生成器之初对generator.next()和yield之间的关系是什么没有办法理解透彻,直到看到两句话:

  1. Generator 函数是一个状态机,封装了多个内部状态 — Generator 函数的语法
  2. 子程序(函数)就是协程的一种特例 — 协程

Generator 函数是一个状态机,封装了多个内部状态

function* helloworld() {yield 'hello'yield 'world'
}const ge = helloworld()
ge.next()
ge.next()

Generator helloworld中通过两个yield产出了两个状态,分别是’hello’和’world’,Generator外部获取这两个状态的方式是调用ge对象的next()方法。

第一次调用next方法获取第一个状态"hello",第二次调用next方法获取第二个状态"world"

其中yield表达式和next方法均用来切换执行上下文,其中next方法将执行上下文从Generator函数外部切换到内部,而yield将执行上下文从Generator函数内部切换到函数外部。除了切换上下文next还将入参传入了函数内部作为yield表达式的返回值,同理,yield也将表达式的值传递给了函数外部。所以,yield是另一种形式的return,而next方法是另一种形式的函数调用。

function* helloworld() {const a = yield 1console.log(a)yield 3
}const ge = helloworld()
const val1 = ge.next()
console.log(val1.value)
const val3 = ge.next(2)
console.log(val3.value)// 打印顺序是1 2 3

子程序(函数)就是协程的一种特例

function* helloworld() {const a = yield 1console.log(a)yield 3
}const ge = helloworld()
const val1 = ge.next()
console.log(val1.value)
const val3 = ge.next(2)
console.log(val3.value)// 打印顺序是1 2 3

在例子里可以将next()可以当做在执行函数,而yield作为return来看的就会好理解很多。

  1. 第一个next()从函数第一行开始执行,到 yield 1 结束执行,返回值1到函数外部。
  2. 第二个next(2),从第一个yield 1处开始执行,用2作为yield 1的返回值,换句话说就是函数开始执行的入参,入参被const a接收,到yield 3返回值3

所以说子程序(函数)就是协程的一种特例。

函数也是封装了状态,通过调用函数获取对应状态,只是这个状态只有一个,函数只能被执行一次,retrun之后无法再继续return之后的语句执行,而generator提供了继续执行中断上下文的能力也就是调用next()方法。

Hi Generator相关推荐

  1. Python错误:AttributeError: 'generator' object has no attribute 'next'解决办法

    今天在学习生成器对象(generation object)运行以下代码时,遇到了一个错误: #定义生成器函数 def liebiao(): for x in range(10): yield x #函 ...

  2. 3d stroke插件下载_推荐一款好用的PS 3D地图插件,PS插件3D Map Generator ,一键生成地图神器...

    今天,给大家推荐一个强大的Photoshop(PS)地图插件--3D Map Generator,可以方便制作3D特效效果. 3D Map Generator插件是什么 3D Map Generato ...

  3. 利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator

    一.前言 利用FPGA设计算法一直以来都是热点,同样也是难点.将复杂的数学公式 模型通过硬件系统来搭建,在低延时 高并行性等优势背后极大提高了设计难度和开发周期.Xilinx公司的sysGen(sys ...

  4. Jfinal Generator 不需要生成带某个前缀的表名数组的方法

    2019独角兽企业重金招聘Python工程师标准>>> package com.demo.common.model; import javax.sql.DataSource; imp ...

  5. .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

    阅读目录 1.复杂的JSON啥样子? 2.使用JSON C# Class Generator介绍和使用 3.就这么完了?No,没那么简单 4.资源 去年,我在一篇文章用原始方法解析复杂字符串,json ...

  6. Parser Generator Tips翻译(中英对译) by Joshua Xu

    You can use the ParserWizard command from the Project menu to help you create initial YACC and Lex s ...

  7. ICPC 2005 hangzhou Generator (UVA1358)KMP + 期望DP / 高斯消元

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Generator Weblink https://www.luogu.com.cn/problem/ ...

  8. Loadrunner连接负载机失败,提示Failed to connect to the load generator.Check the output window for more detail

    在测试连接负载机时,为何连接不上呢,提示"Failed to connect to the load generator.Check the output window for more d ...

  9. JavaScript 异步编程--Generator函数、async、await

    JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...

  10. JS中的 generator

      JS 中的 generator (生成器)和 Python 中的很相似.   一个generator看上去像一个函数,但可以返回多次.与函数不同的是,generator由function*定义(注 ...

最新文章

  1. 百度谷歌等联合推出机器学习基准 加速AI软硬件发展
  2. python 内置模块 增加_模块的内置方法--Python提高班
  3. python 条形图_Python数据可视化:基于matplotlib绘制「堆积条形图」
  4. 2d游戏引擎_游戏60秒:RTS游戏从2D到3D的蜕变
  5. aix服务器屏幕显示被锁住了,AIX恢复密码过程总结
  6. ubuntu下配置jdk(离线压缩包方式)
  7. 7.企业安全建设入门(基于开源软件打造企业网络安全) --- 蜜罐与攻击欺骗
  8. itext html 转换pdf后 字体加粗,HTML转PDF字体的坑搞了半天
  9. CAXA图文档2007服务器端,CAXA图文档客户端系统管理员操作.doc
  10. 装双系统win10和android,教你安装Win10和安卓Android双系统(不是模拟器)
  11. 学习笔记4--自动驾驶汽车感知系统
  12. 领英给好友群发消息的方法和细节
  13. 怎么用浏览器访问计算机文件共享,如何用ES文件浏览器完全共享电脑里的文件流程...
  14. 青玉案·元夕 【宋代】辛弃疾
  15. spring cloud gateway获取真实ip以及跨服务器时路由转发的一些问题
  16. 计算机上根号是哪一个,电脑上怎么哪个键是数学中的开根号啊
  17. Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】
  18. ambari mysql 密码_ambari密码重置
  19. 仓库搬仓实施过程参考
  20. html引用阿里云矢量图标(不照搬官方,手把手教学)

热门文章

  1. Element UI主题换肤功能(基于vue-element-admin框架)
  2. find排除文件 linux_Linux find命令排除某个路径
  3. 趣味编程算法类文章征集列表
  4. 2D卷积与3D卷积的区别
  5. 当下电商究竟都适合从事那些项目,如何居家赚钱?
  6. 关于iptables封禁国外IP方法
  7. H3C_交换机_Vlan配置
  8. java cleartype_等宽雅黑宋体2.1(支持ClearType和GDI++)
  9. 复旦女博士于娟:为啥是我得癌症?
  10. 程序员在国企是种什么体验,国企好还是互联网企业好!