我们说我已经创建了一个ES6生成器
function *createFibonacciIterator(a = 0, b = 1) {
yield b;
yield *createFib(b, b + a); // <== QUESTION IS ABOUT THIS LINE
}
然后我使用该生成器获得前20个结果
let fibber = createFibonacciIterator();
for (let ii = 0; ii < 20; ii++) {
console.log(fibber.next());
}
如果我将*
从yield *createFib(b, b + a);
行中移开,这是有道理的,因为我不想要收益率是迭代器而是实际价值。
生成器中*
的技术含义是什么?
答案 0 :(得分:2)
对于大多数情况
yield *smth;
与
相同for (let x of smth) {
yield x;
}
答案 1 :(得分:2)
在*
声明中使用function
时,这意味着它是一个生成器函数。
但当它用作yield *myGeneratorFunction()
时,Ecmascript 262 specification, Section 14.4.14的定义表示引擎试图解析生成器函数调用生成器函数返回的迭代器的next()
方法。
如果在没有yield
的情况下使用*
(例如,yield createFibonacci()
),则会在yield之后返回表达式的值。在示例中是createFibonacci返回的值。