2016-11-15 50 views
2

对于下面的斐波那契的功能,它的工作原理不是这个for循环按预期方式工作:为什么当我简单的改变两个表达的顺序

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]

但之后,我改变了两个语句顺序,这是行不通的:

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]

它有什么问题?

+5

你需要分号。 – 4castle

+0

@ 4castle这真的有用,但分号丢失时发生了什么? –

+2

javascript尝试最好猜测你想把分号放在哪里 - 它会得到它的错误 - 用新的语法(比如你的'[a,b] = [b,a + b]'),它可能更容易出错不......道德的故事...... **总是用分号** –

回答

5

这是因为你在该行的末尾留出了分号

nums.push(a) 

所以这是两行合并为:

nums.push(a)[a, b] = [b, a + b] 

这不重新分配ab变量,它正在索引一个数组。

你应该真的摆脱了忽略分号的坏习惯。 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]

+0

分号插入遵循设置的规则,所以真正的OP没有正确地推断出哪里插入了分号(并且不会),结果。 ;-) – RobG

相关问题