标签:运行 参数 return yield hello 状态机 -- 异步编程 undefined
1、ES6 提供的一种异步编程解决方案
2、是一个状态机,封装了多个内部状态。
3、是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。
4、Generator 函数是一个普通函数,但是有两个特征。一是,function
关键字与函数名之间有一个星号;二是,函数体内部使用yield
表达式,定义不同的内部状态。
function* helloWorldGenerator() { yield ‘hello‘; yield ‘world‘; return ‘ending‘; } var hw = helloWorldGenerator();
5、调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象-遍历器对象(Iterator Object)。下一步,必须调用遍历器对象的next
方法,使得指针移向下一个状态。
也就是说,每次调用next
方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到下一个yield
表达式(或return
语句)为止。换言之,Generator 函数是分段执行的,yield
表达式是暂停执行的标记,而next
方法可以恢复执行。
6、总结:调用 Generator 函数,返回一个遍历器对象,代表 Generator 函数的内部指针。以后,每次调用遍历器对象的next
方法,就会返回一个有着value
和done
两个属性的对象。value
属性表示当前的内部状态的值,是yield
表达式后面那个表达式的值;done
属性是一个布尔值,表示是否遍历结束。
7、遍历器对象的next
方法的运行逻辑:
yield
表达式,就暂停执行后面的操作,并将紧跟在yield
后面的那个表达式的值,作为返回的对象的value
属性值。next
方法时,再继续往下执行,直到遇到下一个yield
表达式。yield
表达式,就一直运行到函数结束,直到return
语句为止,并将return
语句后面的表达式的值,作为返回的对象的value
属性值。return
语句,则返回的对象的value
属性值为undefined
。8、Generator 函数可以不用yield
表达式,这时就变成了一个单纯的暂缓执行函数。
9、yield
表达式只能用在 Generator 函数里面,用在其他地方都会报错。
10、yield
表达式如果用在另一个表达式之中,必须放在圆括号里面。
11、yield
表达式用作函数参数或放在赋值表达式的右边,可以不加括号。
12、由于 Generator 函数就是遍历器生成函数,因此可以把 Generator 赋值给对象的Symbol.iterator
属性,从而使得该对象具有 Iterator 接口。
var myIterable = {}; myIterable[Symbol.iterator] = function* () { yield 1; yield 2; yield 3; }; [...myIterable] // [1, 2, 3]
标签:运行 参数 return yield hello 状态机 -- 异步编程 undefined
原文地址:https://www.cnblogs.com/adhehe/p/9680928.html