当我简单地改变两个表达式的顺序时,为什么这个for循环不能工作?

Why doesn't this for loop work when I simple change two expression's order

本文关键字:为什么 for 工作 不能 循环 顺序 表达式 改变 简单 两个      更新时间:2023-09-26

对于下面的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]

但是在我改变了两个语句的顺序之后,它不工作了:

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]

怎么了?

这是因为您在行末遗漏了分号

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]