Generator函数的用法(一)

基本概念:
1.Genrator函数是Es6提供的一种异步编程解决方案,从语法上可理解为一个状态机,封装了多个内部状态。
2.执行Genrator函数会返回一个遍历器对象,也就是说Genrator函数除了是状态机,还是一个遍历器对象生成的函数,返回的遍历器对象可以依次遍历函数内部的每一个状态
3.形式上该函数是一个普通的函数,但是有两个特征:一是function命令与函数名之间有个*;二是内部使用yield语句定义不同的内部状态;yield ‘产出’
function *helloWord(){

yield 'Hello';
yield 'word';
return 'end';

}
var hw=helloWord();
该函数既有三个状态:Hello word 和return语句(结束执行);
Generator函数的调用发放和普通函数一样,奇怪的是调用该函数后,该函数并不执行,返回的也不是函数运行的结果,而是一个指向内部状态的指针对象,

Generator函数的用法(一)_第1张图片
也就是遍历器对象(本质就是一个指针对象
接下来我们调用遍历对象的next(),使得指针移向下一个状态。每次调用next 方法,内部指针就从函数头部或上一次停下来的地方开始执行,知道遇到下一个yield语句(或return)为止,也就是说Genrator函数是分段执行的,yield语句是暂停的标记,next可以恢复执行。

Generator函数的用法(一)_第2张图片
next方法返回一个对象,value当前的值,done代表遍历还未结束;第四次调用时,Generator函数已经运行完毕,以后在调用next方法都会返回这个值;
哦对了,ES6并没规定function关键之与函数名之间的*写在哪边,So:
function * foo(){...};
function* foo(){...};
function *foo(){...};
function*foo(){...};
都可以Pass;
!yield与return语句都可以暂停执行,区别是一个函数里只会执行一次return但是可以执行多次yield。换个角度,也可以说是Generator生成了一系列的值,这也就是他名称的来历‘生成器

你可能感兴趣的:(javascript)