【发布时间】:2022-12-06 22:18:11
【问题描述】:
我想用 Javascript 为斐波那契数列编写一个生成器; 0,1,1,2,5,7,12.....(要生成序列,您必须添加最后两个数字) 但是当我将 output.length 分配给代码不起作用的变量时我遇到了这个问题,如果我直接写下来而不是“newNumber”,那么代码仍然有效,但我不明白有什么问题第一个。变量的位置有问题吗?
function fibonacciGenerator(n) {
var output = [];
var lastNumber = output[output.length - 1];
var nPrev = output[output.length - 2];
var newNumber = lastNumber + nPrev;
if (n === 1) {
output = [0];
} else if (n === 2) {
output = [0, 1];
} else {
output = [0, 1];
for (var i = 2; i < n; i++) {
output.push(newNumber);
}
}
return output
}
console.log(fibonacciGenerator(5));
【问题讨论】:
-
当您将
output.length分配给变量时,它会捕获长度在分配的时候,当长度改变时它不会“自动更新”。当您直接插入它时,.length属性访问将捕获那那个时刻的价值,因为你通过推动它来改变输出的长度。 -
并且
output.push(newNumber);将一次又一次地向输出数组推送相同的值 (NaN),因为您应该在每次迭代时填充newNumber变量。我有一个非常非常普遍的建议...如果您在代码中的任何位置使用语句debugger;并且您在开发人员工具打开(并且调试器选项卡处于活动状态)的情况下加载页面,调试器将在那个确切的点中断你可以亲眼看到一步一步发生的事情
标签: javascript