老师,这样如果直接调用tell().next()为什么一直是a呢?

来源:3-17 Generator

沧海的雨季

2019-04-19

图片描述
这里是什么原理?

写回答

1回答

兮漫天

2019-04-20

刚看视频弹出你的问题,看老师没回复,冒然试之:生成器函数有个特点,当你调用函数的时候,相当于说是启动了这个生成器函数,但是因为Generator函数有一个特点,它是惰性求值的,当调用这个函数的时候,也就是你执行tell() 的时候,因为有yiled的存在,函数当前的状态是 <suspended>(暂停的意思),需要你去通过next()方法手动执行下一步!这本没有错!

但是因为,你直接用这个tell()函数调用直接去执行一下步,那么它会认为你是频繁的重复这一动作,所以每次求的值都是a,第二次 它以为你又在开始重新启动再调用这个函数的下一步,所以这里需要一个变量,把启动以后的状态,缓存到一个变量,然后去调用这个变量的next(),因为这时候变量已经缓存了你启动调用的那个生成器函数,再执行next()方法的时候,就是再上一步的基础上继续执行,这样就能得到你想要的值,就相当于手动的执行了iteraotr!

不知道我这么描述你是否清楚,如有不解之处,咱再互相交流学习!

0
2
沧海的雨季
非常感谢!
2019-04-20
共2条回复

ES6零基础教学 解析彩票项目

ES6从零开始,量身设计的迷你案例,让你全面掌握ES6

2579 学习 · 881 问题

查看课程