【发布时间】:2016-12-02 05:02:33
【问题描述】:
在下面的代码中,为什么 first 调用 next() 会返回 second yield 关键字之后的值?
function* generatorFunction() {
yield (yield 'the second yield')();
}
function func(x) {
return 'func passed to the second next()';
}
var iterator = generatorFunction();
var firstValue = iterator.next().value;
var secondValue = iterator.next(func).value;
console.log(firstValue); // "the second yield"
console.log(secondValue); // "func passed to the second next()"
在第一个 next() 上,它将第一个 yield 之后的行的其余部分视为表达式,对吗?这是否意味着(yield x)() 计算结果为 x,但在计算结果时实际上并没有暂停产量?
然后对next 的第二次调用传入一个函数,该函数是否代替(yield 'the second yield') 并因此被执行然后返回其值。
谁能帮忙解释一下这里发生了什么?
顺便说一句,这没有实际用途,我只是通过es6katas。
【问题讨论】:
-
同意@estus 的补充:如果第一个
yield先返回,它会返回什么? -
我想我的字面意思是“在第一次收益时停止”。 (我对它实际上会返回什么感到困惑。)所以它按照计算 yield 表达式的顺序产生,就像
returns一样。很有道理,谢谢大家。 @estus 随时将其复制到答案中。 -
当然。我用运算符优先级解释对其进行了扩充,而不是诉诸“语言感”。
标签: javascript ecmascript-6 yield