Javascript: 在箭头函数内声明的变量不能在 while 循环内更新
Javascript: variable declared inside arrow function can't be updated within while loop
本质上,我正在尝试 运行 一个简单的箭头函数,测试 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 但没有成功。即使将箭头函数更改为普通函数声明也没有任何区别。我想知道这样做的充分理由是什么,以及如何更改此代码片段以使其具有有限循环,然后将 timer complete 记录到控制台。
问题是
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");
本质上,我正在尝试 运行 一个简单的箭头函数,测试 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 但没有成功。即使将箭头函数更改为普通函数声明也没有任何区别。我想知道这样做的充分理由是什么,以及如何更改此代码片段以使其具有有限循环,然后将 timer complete 记录到控制台。
问题是
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");