Generator生成器函数执行过程的理解
Posted kungfupan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Generator生成器函数执行过程的理解相关的知识,希望对你有一定的参考价值。
一个最基本的Generator函数格式如下,函数体内部要使用yield修饰符则必须在函数名前加上*号
结合此函数的调用代码如下,调用testYield(1) 并赋值给变量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生成器函数执行过程的理解的主要内容,如果未能解决你的问题,请参考以下文章