Generator生成器函数执行过程的理解
一个最基本的Generator函数格式如下,函数体内部要使用yield修饰符则必须在函数名前加上*号
结合此函数的调用代码如下,调用testYield) 并赋值给变量g时, 函数体内的任何语句并没有执行,只是生成了一个迭代器赋值给变量g
整个调用过程控制台打印如下
before next
before yield
first next call: {value: 2, done: false}--第一次next方法,next方法的返回值是一个对象,value属性是yield后面语句的返回值,done属性为布尔值,代表整个迭代过程是否已经结束
y: 0--可以看到,第一次执行next方法后,y的值仍然维持初始值不变,所以其实yield的作用是一个代码分界符,第一次调用next方法时函数执行到第一个yield后面的语句为止
after yield
second next call: {value: "str param", done: true}--第二次调用next方法后得到的value为字符串"str param",其实这个"str param"就是整个函数的return值,所以迭代器调用next方法的总次数为yield关键字的数量+1,
除最后一次调用next方法返回对象的value为函数的return值外,前面每次调用next方法返回对象的value值均为对应顺序的yield关键字后面语句的返回值,
但是要注意一点,第二次调用next方法的时候是传入参数"str param"的,如果不传,则最终y将为undefined,所以其实y = yield 可以理解为一个赋值语句,它赋的值第二次调用next方法时传入的参数,而非x + 1
y: str param --最终打印y的值也已经被修改为str param
after next
Generator生成器函数执行过程的理解的更多相关文章
- ES6新特性三: Generator(生成器)函数详解
本文实例讲述了ES6新特性三: Generator(生成器)函数.分享给大家供大家参考,具体如下: 1. 简介 ① 理解:可以把它理解成一个函数的内部状态的遍历器,每调用一次,函数的内部状态发生一次改 ...
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- Generator生成器函数
接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还有一种常用的解决方案,它就是Ge ...
- 取代Promise的Generator生成器函数
接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还有一种常用的解决方案,它就是Ge ...
- 浅谈javascript函数执行过程
javascript函数执行过程: 1. 为函数创建一个执行环境 2. 复制函数的 [[scopes]] 属性中的对象构建起执行环境的作用链域 3. 创建函数活动对象并推入执行环境作用链域的前端 4. ...
- JS,Javascript加载与函数执行过程
Js,Javascript加载与函数执行过程 test.html <!DOCTYPE HTML> <html lang="en"> <head> ...
- 对于Linux内核执行过程的理解(基于fork、execve、schedule等函数)
382 + 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验环境 win10 -> VMware -> Ubuntu1 ...
- Generator(生成器)函数
一.基础知识 Generator函数是ES6出现的一种异步操作实现方案. 异步即代码分两段,但是不是连续执行,第一段执行完后,去执行其他代码,等条件允许,再执行第二段. 同步即代码连续执行. 1. G ...
- 函数可重入问题reentrant functions(函数执行过程中可以被中断,允许多个副本)
最近经常听到这个名词,以前也听到过,不过接触更多的是“线程安全问题”,而且本人也一直理解的是两个名字的含义是一样的.今天仔细总结一下这个名词相关的概念. 引用博文:可重入函数和不可重入函数 (http ...
随机推荐
- tomcat 下 base64图片上传超过2m的解决方案
方案一: tomcat部署下默认post请求提交参数大小为2M左右,超过这个大小,就会传值不成功 要使post请求参数无大小限制,需要在server.xml上修改,如下: <Connector ...
- eclipse卡在revert resources的解决方法
遇到Eclipse卡在Revert Resources进程的问题,等又等不到它执行完毕(进度一直是0%),取消又是石沉大海一样毫无动静.更气人的是这个进程阻塞了其他所有的进程,什么操作都做不了.真是苦 ...
- Linq 将两个查询结果合称为一个
var handsonitems = from a in db.DltQuestionHandson join c in db.DltBdChapter on new { a.ChapterCode ...
- 在eclipse中,用maven创建一个web项目工程
1.在eclipse中用maven创建项目,右键new>>Maven Project 2.点击next继续 3.点击next继续,选择maven-archetype-webapp, 4.点 ...
- windows配置flutter的注意点
参考官网配置:https://flutter.cn/docs/get-started/install/windows 注意点: 1. 配置好环境变量后,必须重启电脑才有效果(后面还有需要重启的,所以到 ...
- Java虚拟机内存区域详解
JVM 运行时的数据区域 首先获取一个直观的认识: 总共也就这么 5 个区(直接内存不属于 JVM 运行时数据区的一部分),除了程序计数器其他的地方都有可能出现 OOM (OutOfMemoryErr ...
- 数据库——可视化工具Navicat、pymysql模块、sql注入问题
数据库--可视化工具Navicat.pymysql模块.sql注入问题 Navicat可视化工具 Navicat是数据库的一个可视化工具,可直接在百度搜索下载安装,它可以通过鼠标"点点点&q ...
- 前后端分离项目Vue+drf开发部署总结
思维导图xmind文件:https://files-cdn.cnblogs.com/files/benjieming/%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A ...
- Linux实用指令(5)
指定运行级别(系统的制定级别配置文件/etc/inittab): 0:关机 1:单用户(单用户级别root登录不需要密码,进入之后重新设置密码) 2:多用户无网络服务 3:多用户有网络服务 4:系统未 ...
- 安装ceres-solver win10遇到Eigen安装的问题
1.无法打开包括文件: “Eigen/Core”: 去github上下载最新的源码 2. "The Eigen/Array header does no longer exist in E ...