繁体   English   中英

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

[英]ES6 Generator Yield inside arithmetic operation

当我定义了这种生成器时

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)

结果为40

从第二个.next(10)调用之后的那一刻起,该如何解释? 为什么要记录40

在此处输入图片说明

EURECA! yield 42表示在第一个.next()调用中,我们将收到{value: 42, done: false}作为结果(如问题末尾的图像所示),因此基本上,它用作return语句,以及何时我们第二次调用.next(10) ,代码中不再有yield 42 ,但是我们用10代替了所有yield 42

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM