让前端飞Web前端之路前端开发那些事儿

ES6 Generator

2022-05-20  本文已影响0人  嘻哈章鱼小丸子
定义

ES6 提供的一种异步编程解决方案

有多种理解角度:

调用与执行

Generator 函数的调用方法与普通函数一样,在函数名后面加上一对圆括号。不同的是,调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,也就是遍历器对象(Iterator Object),不是this对象(获取不到Generator 函数里面定义的属性)

下一步,必须调用遍历器对象的next方法,使得指针移向下一个状态。也就是说,每次调用next方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到下一个yield表达式(或return语句)为止。换言之,Generator 函数是分段执行的,yield表达式是暂停执行的标记,而next方法可以恢复执行。

yield表达式

yield表达式是Generator 函数的暂停标志。遇到yield表达式,就暂停执行后面的操作,并将紧跟在yield后面的那个表达式的值,作为返回的对象的value属性值。

yield表达式本身没有返回值,或者说总是返回undefinednext方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值。

方法

共同特点:让 Generator 函数恢复执行,并且使用不同的语句替换yield表达式。

示例
function* f() {
  for(var i = 0; true; i++) {
    var reset = yield i;
    if(reset) { i = -1; }
  }
}

var g = f();

g.next() // { value: 0, done: false }
g.next() // { value: 1, done: false }
g.next(true) // { value: 0, done: false }
参考资料

MDN Generator
ES6 generator

上一篇 下一篇

猜你喜欢

热点阅读