Generator函数

javaScript

Generator函数是一个状态机分段执行的,内部封装了多个内部状态,yield表达式是暂停执行的标记,而next方法可以恢复执行

Generator 特征
  1. function关键字与函数名之间有一个星号
  2. 函数体内部使用yield表达式, 定义不同的内部状态
  3. 调用Generator函数后,该函数并不执行,返回的函数运行结果,而是一个遍历器对象(Iterator Object),必须调用遍历器对象的next方法,使得指针移向下一个状态
  4. yield表达式只能用在Generator函数内,否则会报错
  5. ES6规定遍历器是Generator函数的实例,也继承了Generator函数的prototyep对象上的方法
  6. Generator函数不能跟new命令一起用,会报错
调用方式
  1. 扩展运算符([…generator()])
  2. Array.from(generator())
  3. 解构赋值(let [x, y] = generator())
  4. for…of 循环
总结

调用Generator函数,返回一个遍历器对象,代表Generator函数的内部指针。以后每次调用遍历器对象的next方法,就会返回一个有着valuedone两个属性的对象,value属性表示当前的内部状态的值,是yiled表达式后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束。