【问题标题】:ES6 Generator Yield inside arithmetic operationES6 生成器内部算术运算
【发布时间】:2018-05-07 10:44:30
【问题描述】:

当我定义了这种生成器时

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

然后我运行它:

let it = process()

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

it.next()

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

it.next(10)

这是迭代器中的最后一个yield,据我所知,第二个.next() 调用1010 代替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)

结果为@​​987654338@。

如何从第二次.next(10) 电话开始解释?为什么会记录40

【问题讨论】:

    标签: javascript ecmascript-6 generator


    【解决方案1】:

    欧瑞加! yield 42 表示在第一次调用.next() 时,我们将收到{value: 42, done: false} 作为结果(如问题末尾的图片所示),所以基本上这充当返回语句,当我们调用.next(10) 时,第二个代码中不再有 yield 42 了,但我们用 10 代替了所有这些 yield 42

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 2013-03-06
      • 2016-03-10
      • 1970-01-01
      • 2014-11-13
      • 2012-12-16
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多