yield* 是否等同于 javascript 中具有纯 yield 的 while 循环



如果我有一行这样的行:

yield* foo()

我可以用以下调子代替它吗:

while(true) {
   var x = foo.next();
   if(x.done)
       break;
    yield x;
}

显然,这更冗长,但我试图理解 yield* 是否仅仅是句法糖,或者是否有一些我不清楚的语义方面。

而不是yield x你需要做yield x.value。您还需要调用 foo 来获取迭代器。 .nextfoo生成器返回的迭代器的方法。

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()));

最新更新