难以理解函数内的调用堆栈

trouble understanding call-stack within a function

我目前正在学习 Javascript 和 C.S 基础知识,我正在完成一项任务,该任务是创建一个函数,该函数采用值 (num) 并输出斐波那契数内的索引值。

示例:函数 (6) 输出 8;因为 8 是斐波那契数列中的第 6 个数字。

斐波那契数列:1,1,2,3,5,8

索引位置:1,2,3,4,5,6

下面是问题的解决方法。

const fibonacci = function(count) {
  let a = 0;
  let b = 1;
  for (let i = 1; i < count; i++) {
    const temp = b;
    b = a + b;
    a = temp;
  }
  return b;
};

我难以理解的部分在于 for 循环,从我收集到的信息来看,这似乎是它在调用堆栈中的执行方式:

  1. 执行 b + a
  2. 将 b 的前一个值存储在 temp
  3. a 现在等于 temp/previousValue
  4. 执行 b + a
  5. 更新 a 的值...

但我很难理解的是为什么 a 存储 B 的前一个值而不是当前值。

当我设想调用堆栈时 运行 我希望输出看起来像这样;

0,1
1,1
2,2

而不是..

0,1
1,1
1,2

之后,即使 b 现在等于 2,a 的值仍保持为 1
temp = b;
b = 1;
a = 1;
b = a + b // 2;
a = temp;

a 现在应该等于 2,但它仍然是 1;为什么?

如果我没理解错的话,你的误会是:

a is now equal to temp/previousValue

存储在a中的值直到循环体中的最后一个操作才会改变。初始值为a=0; b=1;,当循环体运行时,

  1. temp设置为b的值,所以temp=1;
  2. b 设置为 a+b,所以 b=1
  3. a 更新为 temp 中的值,因此 a=1

在每个循环结束时,b 保存下一个斐波那契值。 a 中的值仅更新为先前的值,以便可以在循环的下一次迭代中使用它来计算 b.

的新值