在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
What does the * (star/asterisk) syntax after a yield mean in a recursive generator function?
假设我已经创建了一个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);
行中去掉,事情就会中断,这是有道理的,因为我不想产生迭代器,而是想要一个实际值。
*
在发电机中的技术意义是什么?
对于大多数情况,
yield *smth;
和一样
for (let x of smth) {
yield x;
}
当在function
声明中使用*
时,这意味着它是一个生成器函数。
但当它被用作yield *myGeneratorFunction()
时,Ecmascript 262规范第14.4.14节的定义称,引擎试图解析调用生成器函数返回的迭代器的next()
方法的生成器函数。
当使用yield
而不使用*
时(例如,yield createFibonacci()
),它会在yield之后返回表达式的值。示例中是createFibonacci的返回值。
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 全局变量和全局对象的属性之间有什么区别吗
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在ember/handlers中使用value和valueBinding有什么区别
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 什么是&&在没有if的行中的变量之间
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- DOM元素和angular元素之间的主要区别是什么
- javascript导入的最佳实践是什么
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 基于窗口宽度jquery的函数的替代方法是什么
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么