javascript - Javascript:在箭头函数中声明的变量不能在while循环中更新
问题描述
本质上,我正在尝试运行一个简单的箭头函数,在 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 ,但没有成功。即使将箭头函数更改为普通函数声明也没有任何区别。我想知道这样做的充分理由是什么,以及如何更改此代码片段以使其具有有限循环,然后将计时器完整记录到控制台。
解决方案
问题是
time = time++;
这是使用post-increment,这意味着增量表达式解析为在变量更改发生之前的值。发生的逻辑与以下非常相似:
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");
推荐阅读
- python-3.x - 如何在Python列表中的每个元素后插入空格
- hibernate - 在多个实体之间使用@MapsId 进行一对一映射
- r - 设置具有不同“父”级别的调色板?
- vb.net - 通过水晶报表将图表保存到数据库和报表图表的最佳方法是什么?
- javascript - 用于显示对象的 NodeJS 漂亮控制台
- rubygems - 安装 commonmarker (0.17.13) 时出错,Bundler 无法继续
- django - 禁止(未设置 CSRF cookie。):/paypal/ | 姜戈
- javascript - Phantomjs 每 5 秒重新加载同一页面
- java - 如何创建一对字符串和列表
? - java - 使用 JOptionPane 未解决的编译问题异常