算术运算中的ES6发生器产量

时间:2017-11-23 12:50:01

标签: javascript ecmascript-6 generator

当我定义了这种发生器时

function *process() {
  let value = 4 * (yield 42)
  console.log(value)
}

我运行它:

let it = process()

it变量获取处于暂停状态的迭代器。然后我打电话给

it.next()

运行生成器体直到yield语句。然后我再次调用.next()恢复生成器函数,将10作为参数传递给它

it.next(10)

这是迭代器中的最后一个yield,据我所知,第二个.next()调用10调用10代替yield,结果在4 * (10 42)中,评估这是控制台产量Uncaught SyntaxError: Unexpected number,但在运行代码时

 function *process() {
      let value = 4 * (yield 42)
      console.log(value)
    }
let it = process()
it.next()
it.next(10)

结果为40

如何从第二次.next(10)电话后的那一刻开始解释?为何记录40

enter image description here

1 个答案:

答案 0 :(得分:0)

EURECA! yield 42表示在第一次.next()调用时,我们将收到{value: 42, done: false}作为结果(如问题末尾的图片中所示),所以基本上这可以作为return语句,当我们第二次在代码中没有.next(10)时调用yield 42,但我们将10代替所有yield 42

我相信描述这一点的文档中的章节是this,即算法的第10步:

  

使用恢复暂停的genContext评估   NormalCompletion(value)作为暂停操作的结果   它。设result为恢复计算返回的值。