在递归生成函数中,收益后的*(星号/星号)语法是什么意思?

Ant*_*ige 8 javascript iterator yield generator ecmascript-6

假设我已经创建了一个ES6生成器

function *createFibonacciIterator(a = 0, b = 1) {
  yield b;
  yield *createFib(b, b + a); // <== QUESTION IS ABOUT THIS LINE
}
Run Code Online (Sandbox Code Playgroud)

然后我使用该生成器获得前20个结果

let fibber = createFibonacciIterator();
for (let ii = 0; ii < 20; ii++) {
    console.log(fibber.next());
}
Run Code Online (Sandbox Code Playgroud)

如果我离开*了的yield *createFib(b, b + a);线的东西打破,这是有道理的,因为我不希望产生一个迭代器,但实际价值.

*发电机的技术含义是什么?

Qwe*_*tiy 4

对于大多数情况

yield *smth;
Run Code Online (Sandbox Code Playgroud)

做同样的事情

for (let x of smth) {
  yield x;
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个不错的简化,但它无法解决“yield *generator()”的计算结果,结果是生成器对象“返回”的迭代结束值。它也不能正确地表示当生成器的消费者将其扔进生成器等时会发生什么。 (2认同)