当我定义了这种发生器时
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
?
答案 0 :(得分:0)
EURECA! yield 42
表示在第一次.next()
调用时,我们将收到{value: 42, done: false}
作为结果(如问题末尾的图片中所示),所以基本上这可以作为return语句,当我们第二次在代码中没有.next(10)
时调用yield 42
,但我们将10
代替所有yield 42
。
我相信描述这一点的文档中的章节是this,即算法的第10步:
使用恢复暂停的genContext评估 NormalCompletion(value)作为暂停操作的结果 它。设result为恢复计算返回的值。