我创建了一个函数来使用es6生成器生成fibonacci系列:
//WARNING CAUSES INFINITE LOOP
function* fibonacci(limit = Infinity) {
let current = 0
let next = 1
while (current < limit) {
yield current
[current, next] = [next, current + next]
}
}
for (let n of fibonacci(200)) {
console.log(n)
}上面的函数不交换这两个数字,如果在任何其他函数中通常交换这两个数字的话。在运行这个函数时,我得到一个无限循环。为什么变量交换不能工作?
发布于 2017-11-02 11:58:57
你必须先交换,然后让步。生成将控制权还给调用方,因此kindad方法在那里停止执行。
这将有效(在Firefox中进行测试)。
function* fibonacci(limit = Infinity) {
let current = 0
let next = 1
while (current < limit) {
[current, next] = [next, current + next];
yield current;
}
}
for (let n of fibonacci(200)) {
console.log(n)
}https://stackoverflow.com/questions/47074434
复制相似问题