曲振飞的个人博客

专注于Web全栈开发、APP设计、网站建设

当前位置 : 主页 > 后端开发 > 一段小程序带你走进Generator生成器函数

一段小程序带你走进Generator生成器函数

时间:2016-12-23 21:33:08 栏目:后端开发 作者:曲振飞 点击: 836

generator指当你在执行一个函数的时候,你可以在函数的某一个点暂停函数的执行,并且做一些其他的工作,然后在返回到这个函数里面继续执行甚至是携带一些新的值向下传递执行。

创建generator生成器函数只需要在function后面加入*号,这个生成器函数会返回一个生成器对象

实例:

var gen = function *(n){
	for(var i=0;i < 3;i++){
		n++;
		yield n;
	}
}
var genObj = gen(2);
console.log(genObj.next());
console.log(genObj.next());
console.log(genObj.next());
console.log(genObj.next());

当我们调用这个gen(2)函数后赋值给genObj拿到的是一个迭代器对象,此时并不会去执行,需要每次调用这个迭代器的next方法,才会从上一次暂停的地方继续执行,直到遇到下一个yield语句。那么yield语句的作用就是暂停语句的执行,直到遇到下一个next方法。

第一次执行next()方法时,n的值为2,加1后n的值为3遇到yield语句暂停执行,输出结果为3

第二次执行next()方法,之前保存的堆栈中n的值为3,执行加1返回的值为4

第三次执行next()方法,此时的值为5

第四次执行next()方法,循环体已经结束,此时拿到的值为undefined

最终输出结果:

{ value: 3, done: false }
{ value: 4, done: false }
{ value: 5, done: false }
{ value: undefined, done: true }

迭代器在执行这个函数的时候总是会返回一个对象,在这个对象里面会有两个属性value和done,value就是内部某个状态的返回值,done表示这个生成器函数内部是否被迭代完毕,当迭代完毕的时候这个done的值为true否则为false。



关键字: Generator

关于站长

曲振飞,一个热忠、从事于互联网的90后青年.专注于网站建站、网站设计及优化.以用户体验、WEB标准为主旨,将网站的整体设计与网页设计的相关原理紧密结合.