Javascript:在箭头函数内声明的变量无法在while循环内更 新

问题描述 投票:0回答:1

本质上,我正在尝试运行一个简单的箭头功能,以Javascript测试同步和阻塞代码。这是代码段:

let runTimer = (startingTime) => {
  let time = parseInt(startingTime);
  while (time < 100) {
    console.log("testing", time);
    time = time++;
  }
};

runTimer(0)
console.log("timer complete");

发生的事情是时间变量从未在while循环内更​​新,因此导致了无限循环。我也曾尝试使用var而不是let来声明时间变量,但没有成功。即使将arrow函数更改为普通函数声明也没有任何区别。我想知道这样做的好原因是什么,以及如何更改此代码片段以进行有限循环,然后将timer complete登录到控制台。

javascript blocking synchronous
1个回答
1
投票

问题是

time = time++;

这正在使用post-increment,这意味着增量表达式解析为的值是before更改变量。发生的逻辑与以下内容非常相似:

time = (() => {
  const origTime = time;
  time = time + 1;
  return origTime;
})();

此解析为time = time。尽管增量会更新变量,但是原始值随后会再次分配给time,因此它似乎保持不变。

无论如何,我还是建议不要使用增量作为表达式,它们会造成混淆,并且可能会产生此类错误。只需执行time++

let runTimer = (startingTime) => {
  let time = parseInt(startingTime);
  while (time < 100) {
    console.log("testing", time);
    time++;
  }
};

runTimer(0)
console.log("timer complete");
© www.soinside.com 2019 - 2024. All rights reserved.