全局变量没有更新
Global variables aren't updating
我为此困惑了一两天。我正在尝试创建一个计时器,并且已经提取了一些代码。我不明白为什么当我记录变量 minutes 或 seconds 时,值仍然为 0。尽管变量是全局变量。非常感谢!
let totalTime = 0;
let minutes = Math.floor(totalTime / 60);
let seconds = totalTime % 60;
function countTime() {
return totalTime += 1;
}
function startCount() {
countInt = setInterval(countTime, 1000);
}
startCount()
console.log(seconds); // Why does the output stay 0?
我会这样做:
var totalTime = 0;
var minutes, seconds;
function startTimer(){
let countInt = setInterval(() => {
totalTime++;
}, 1000);
}
function updateTimeData(){
minutes = Math.floor(totalTime / 60);
seconds = totalTime % 60;
}
startTimer();
setTimeout(() => {
updateTimeData();
console.log(seconds);
}, 5000);
如果您想获得正确的结果,setTimeout 是必需的。 JavaScript 是异步的,因此代码中的 console.log 会立即被调用,不会等待 setInterval(因为它在 setInterval 函数之外)。
如果您不知道:
setTimeout 的工作原理与 setInterval 类似,但只调用一次
在您的代码中 countTime()
仅在 1 秒后运行,但 console.log 立即 运行。
试试这个:
let totalTime = 0;
let minutes = Math.floor(totalTime / 60);
let seconds = totalTime % 60;
function countTime() {
// This will run every second
totalTime += 1;
minutes = Math.floor(totalTime / 60);
seconds = totalTime % 60;
console.log(minutes, seconds); // here you log after it has been updated.
}
function startCount() {
countInt = setInterval(countTime, 1000);
}
startCount()
我为此困惑了一两天。我正在尝试创建一个计时器,并且已经提取了一些代码。我不明白为什么当我记录变量 minutes 或 seconds 时,值仍然为 0。尽管变量是全局变量。非常感谢!
let totalTime = 0;
let minutes = Math.floor(totalTime / 60);
let seconds = totalTime % 60;
function countTime() {
return totalTime += 1;
}
function startCount() {
countInt = setInterval(countTime, 1000);
}
startCount()
console.log(seconds); // Why does the output stay 0?
我会这样做:
var totalTime = 0;
var minutes, seconds;
function startTimer(){
let countInt = setInterval(() => {
totalTime++;
}, 1000);
}
function updateTimeData(){
minutes = Math.floor(totalTime / 60);
seconds = totalTime % 60;
}
startTimer();
setTimeout(() => {
updateTimeData();
console.log(seconds);
}, 5000);
如果您想获得正确的结果,setTimeout 是必需的。 JavaScript 是异步的,因此代码中的 console.log 会立即被调用,不会等待 setInterval(因为它在 setInterval 函数之外)。
如果您不知道:
setTimeout 的工作原理与 setInterval 类似,但只调用一次
在您的代码中 countTime()
仅在 1 秒后运行,但 console.log 立即 运行。
试试这个:
let totalTime = 0;
let minutes = Math.floor(totalTime / 60);
let seconds = totalTime % 60;
function countTime() {
// This will run every second
totalTime += 1;
minutes = Math.floor(totalTime / 60);
seconds = totalTime % 60;
console.log(minutes, seconds); // here you log after it has been updated.
}
function startCount() {
countInt = setInterval(countTime, 1000);
}
startCount()