我在复习一些JS时,看到了一个简单的斐波那契计算器的示例:
function* fibs() {
var a = 0;
var b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
var [first, second, third, fourth, fifth, sixth] = fibs();
// first = 0
// second = 1
// third = 1
// fourth = 2
// fifth = 3
// sixth = 5
无论你将多少元素放入结果数组中,该函数都会精确地循环相应的次数并成功返回结果,不会多也不会少,没有任何错误。
var [first, second] = fibs(); // Works great!
var [a, b, c, d, e, f, g, h, I, j, k, l] = fibs(); // Still works!
我已经仔细查看文档,但找不到任何可能暗示发生了什么的内容。
生成器如何知道何时退出循环并完成操作?没有退出条件,也没有任何提示表明这只会永远运行。
非常感谢。
编辑#1
是否有另一种使用相同生成器获取序列中第n个数字的方法,而无需一个可能巨大的结果数组?