next 方法的参数

yield表达式本身没返回值(返回undefined)。

next方法可以带一个参数,该参数会被当作上一个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 }

这个功能很重要。Generator 函数从暂停状态到恢复运行,它的上下文状态(context)是不变的。通过next方法的参数,能在 Generator 函数开始运行后,继续向函数体内注入值。

即:可在 Generator 函数运行的不同阶段,从外部向内部注入不同的值,从而调整函数行为

由于next方法的参数表示上一个yield表达式的返回值,在第一次使用next方法时,传递参数无效

V8 引擎直接忽略第一次next方法时的参数,只有从第二次使用next方法开始,参数才是有效的。从语义上讲,第一个next方法用来启动遍历器对象,不用带有参数。

results matching ""

    No results matching ""