概念

Generator是ES6提供的一种异步编程解决方案,它的执行方式与其他函数完全不一样。
1、我们可以理解为它是一个状态机,里面封装了多个内部状态。
2、执行Generator函数会返回一个遍历器对象,所以也可以称为是遍历器生成器函数,返回的遍历器对象可以依次遍历这个Generator函数的成员和状态。
3、写法上:与普通函数不同的是,会在声明关键字后面加星号 function*;在函数内部可以使用yield表达式。这里的星号可以与function有空格,没有明确规定位置
例如:

function* helloWorld() {yield 'hello'yield 'world'return 'ending'
}let hello = helloWorld()
hello.next() // {value: 'hello', done: false}
hello.next() // {value: 'world', done: false}
hello.next() // {value: 'ending', done: false}
hello.next() // {value: undefined, done: true}

分析:
这里函数声明使用了两个yield,实际函数定义了3个状态,分别是hello\world\ending,
调用 helloWorld() 后并没有执行,而是生成一个遍历器对象,
这个对象指向对象的内部状态信息并且具有next方法,执行next方法,指针才会指向下一个状态。

yield表达式

由于generator函数返回的是一个遍历器对象,调用next方法才会执行遍历,因此提供了yield表达式来逐步执行遍历
每当遇到yield,遍历器就会停止并且返回yield后面的对象信息,直到遇到return或者没有return时就返回undefined来结束遍历
这里yield起到一个暂停的作用

1、yield只能用在generator函数中,否则会报错

(function (){yield 1;
})()
// 这里会报错,因为函数不是generator函数

2、yield如果用在另一个表达式里,需要使用括号

function* demo() {console.log('Hello' + yield); // SyntaxErrorconsole.log('Hello' + yield 123); // SyntaxErrorconsole.log('Hello' + (yield)); // OKconsole.log('Hello' + (yield 123)); // OK
}

yield与return

相同点:都会返回后面表达式的值
不同点:yield可以有多个,并且每一个值都会返回,而return就只能执行一次,返回一个值

暂缓执行函数

若generator函数不使用yield表达式,则该函数可以作为暂缓执行函数使用

function* add() {console.log('success');
}
let addFunc = add()
addFunc.next()

Generator——简介相关推荐

  1. Generator 简介

    Generator 就是一种状态机,封装多个内部状态. 执行 Generator 函数会返回一个遍历器对象(),也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对 ...

  2. System Generator简介

    前言 System generator 安装之后会在Simulin模块库中添加一些Xilinx FPGA专用的模块库,包括Basic Element,Communication,Control Log ...

  3. 基于FPGA的图像处理(一)--System Generator介绍

    计算机视觉系统通常需要进行大量的信息处理才能够得到所需要的信息.目前主要有CPU.GPU.ASIC.DSP.FPGA等计算平台. 常用的计算机视觉系统通过通用计算机进行视觉信息处理,但是,由于CPU的 ...

  4. MyBatis Generator 代码自动生成器,从此解放你的双手

    前言 在日常开发工作中,我们往往需要自己去构建各种数据表所对应的持久化对象(PO).用于操作数据库的接口(DAO)以及跟 DAO 所绑定的对应 XML.这都是一些重复性的操作,不需要多大技术含量,这时 ...

  5. Mybatis Generator逆向工程的使用

    MyBatis Generator简介 MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将为所有版本的MyBatis以及版本2.2.0之后的 ...

  6. 5.6 Mybatis代码生成器Mybatis Generator (MBG)实战详解

    文章目录 前言 一.Mybatis Generator简介 二.Maven插件运行方式 三.生成配置 generatorConfig.xml MyBatis3Simple风格 MyBatis3风格 M ...

  7. MyBatis Generator 代码生成器

    MyBatis Generator 代码生成器 MyBatis Generator简介 MyBatis Generator(MBG)是MyBatis 的代码生成器.它将为MyBatis的所有版本生成代 ...

  8. SpringBoot第八篇:整合MyBatis-Generator

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10894278.html 版权声明:本文为博主原创文章,转载请附上博文链接! 注意:本章有大量代码 ...

  9. 使用VSTS的Git进行版本控制(四)——在Visual Studio中管理分支

    使用VSTS的Git进行版本控制(四)--在Visual Studio中管理分支 可以从web版Team Services Git repo 的Branches视图中管理工作.定制视图来跟踪最关注的分 ...

最新文章

  1. XenServer安全重启xapi的方法
  2. 微型计算机技术实验报告,微型计算机技术及应用实验报告.docx
  3. 【励志】高考失利之后,属于我的大学本科四年
  4. Linux开机启动服务管理
  5. 'staticfiles' is not a registered tag library. Must be one of:
  6. jenkins配置记录(2)--代码发布流程
  7. 服务超时时间如何设置、如何对超时时间治理、超时设计原则一文揭秘!
  8. Android Studio(7)---查找例子
  9. linux下虚拟光驱,求助:谁有Linux下的虚拟光驱软件?
  10. Oracle 字符集
  11. Caffe for Python 官方教程(翻译)
  12. 迷你世界甲龙变身机器人_迷你世界X变形金刚双形态皮肤特效,自带双血条,简直无敌...
  13. java 8-8 接口的练习
  14. 如何使用Arduino开发板和ADXL345加速度计跟踪方向
  15. 微信小程序使用webview打开pdf文档及显示网页内容
  16. 计算机的符号名称大全集,特殊符号大全
  17. mac系统通过ADB与scrcpy实现手机投屏
  18. 【机器学习系列】之机器学习基础
  19. WORDPRESS 网站打不开 error establishing a database connection 、is marked as crashed and should be repa
  20. html6能代替原生app,网页转APP工具能否取代原生APP?这个在线制作平台,让移动开发更简单...

热门文章

  1. 冲突向量求流水线调度策咯
  2. MathType公式行间距与文档参数不统一的解决办法
  3. 关于pydicom参数说明
  4. 现代通信领域不可不读的7本好书(内含超级赠书福利)
  5. cv曲线面积的意义_关于粒径及粒度分布的定义及其在粉末涂料生产中的指导意义...
  6. Angularjs树形结构
  7. Eye tracker accuracy and precision
  8. Eclipse新建工作空间后,怎么把之前的配置复制到新的空间上来?
  9. realplayer java,在网页中使用realplayer播放rm文件
  10. realplayer java,不同浏览器调用realplayer插件在线播放视频的有关问题,请大神们进来看看...