【发布时间】:2016-08-25 18:51:20
【问题描述】:
function* generatorFunction() {
yield (yield 1)(yield 2)(yield 3)();
}
var iterator = generatorFunction();
// [1, 2, 3]
var iteratedOver = [iterator.next().value, iterator.next().value, iterator.next().value];
我不确定这是如何工作的。
yield 不返回函数引用,那么像(yield 2) 这样的括号语句是什么——它们是没有主体的胖箭头匿名函数吗?像这样使用部分应用程序如何调用它们?
我在这里遗漏了一些东西,有人可以解释一下吗?
更新:在 Chrome 50.0.2661.86、Safari 9.1 (50.0.2661.86)、Firefox 44.0.2 三种浏览器上试用,均无错误。
ESFiddle 也可以正常执行。
评论者报告 Babel 执行也没有错误。
问题来源来自http://tddbin.com/#?kata=es6/language/generator/send-function,第二个kata。
【问题讨论】:
-
您的代码示例不适合我。
Uncaught TypeError: (intermediate value) is not a function -
yield返回您传递给.next(…)的任何内容。你很幸运,你只调用了 2 次.next(),下次它会抛出。 -
@Ben:是的,但它引出了一个问题......是什么让你相信这个代码首先是有效的?你在什么地方看到过吗?
-
@Ben:该链接在输出中产生错误。不过对 Safari 很感兴趣。
-
@Bergi 3 个调用,实际上,对应于三个“内部”
yields。
标签: javascript ecmascript-6 generator yield