If I have a line like:
yield* foo()
我能否用类似以下的内容替换它:
while(true) {
var x = foo.next();
if(x.done)
break;
yield x;
}
显然这个表达更冗长,但我想了解yield*只是语法糖还是有一些我不清楚的语义方面。
If I have a line like:
yield* foo()
我能否用类似以下的内容替换它:
while(true) {
var x = foo.next();
if(x.done)
break;
yield x;
}
显然这个表达更冗长,但我想了解yield*只是语法糖还是有一些我不清楚的语义方面。
yield x
,您需要使用yield x.value
。您还需要调用foo
以获取迭代器。.next
是由foo
生成器返回的迭代器的一种方法。
function *foo() {
yield 1;
yield 2;
yield 3;
}
function *f() {
yield *foo();
}
console.log(Array.from(f()));
function *g() {
var iterator = foo();
while (true) {
var x = iterator.next();
if (x.done) break;
yield x.value;
}
}
console.log(Array.from(g()));
for (var x of foo()) { yield x; }
。规范参考链接:http://www.ecma-international.org/ecma-262/7.0/#sec-generator-function-definitions-runtime-semantics-evaluation。*编辑:* 你需要先调用foo()
来获取迭代器。 - Felix Klingyield*
表达式用于委托至另一个生成器或可迭代对象。" - guest271314