对于以下fibonacci函数,它按预期工作:
function fibonacci(n) {
var nums = []
var a = b = 1
for (let i = 0; i < n; i++) {
[a, b] = [b, a + b]
nums.push(a)
}
return nums
}
console.log(fibonacci(5));
// outputs: [1,2,3,5,8]Run Code Online (Sandbox Code Playgroud)
但在我更改了两个语句的顺序后,它不起作用:
function fibonacci(n) {
var nums = []
var a = b = 1
for (let i = 0; i < n; i++) {
nums.push(a)
[a, b] = [b, a + b]
}
return nums
}
console.log(fibonacci(5));
// outputs: [1,1,1,1,1]Run Code Online (Sandbox Code Playgroud)
它出什么问题了?
这是因为你在行的末尾遗漏了分号
nums.push(a)
Run Code Online (Sandbox Code Playgroud)
所以它将两条线合并为:
nums.push(a)[a, b] = [b, a + b]
Run Code Online (Sandbox Code Playgroud)
这不会重新分配a和b变量,它是索引数组.
你应该摆脱省略分号的坏习惯.Javascript允许它,但正如您在此示例中看到的那样,并不总是推断语句会在您认为它们出现的地方中断.
function fibonacci(n) {
var nums = [];
var a = b = 1;
for (let i = 0; i < n; i++) {
nums.push(a);
[a, b] = [b, a + b];
}
return nums;
}
console.log(fibonacci(5));
// outputs: [1,1,1,1,1]Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |