我想设置一个计时器,以便它显示用户的秒数和最小值,我使用setInterval获取秒数,如果有60秒钟,它会减少1分钟用户。 事情是我每次尝试去做的时候都会遇到无限的fo lo。为什么setInterval使无限循环
像
var userObj = {
name: "",
min: 0,
sec:0
}
function timerCount() {
while (userObj.sec !== 0) {
console.log(userObj.min)
if (userObj.sec == 0) {
setInterval(function() {
userObj.min--;
userObj.sec = 59
}, 1000);
}
while(userObj.sec !== 0) {
setInterval(function() {
console.log(userObj.sec)
userObj.sec--;
}, 1000);
}
}
}
你需要在一个变量中存储'setInterval()'和'clearInterval(变量)'来停止它,否则它会无限调用 – Bhumika107
Javascript in浏览器或node.js是一种事件驱动的语言,并且是单线程的,所以你不能在while()循环中循环,并期望执行任何其他的定时器代码。定时器回调将永远不会执行,直到完成while()'循环。所以,你不能像这样循环等待计时器来更新一些东西。计时器永远不会执行,所以你只会有一个无限循环。 – jfriend00
这里至少有一些问题。 1)你在while循环中调用setInterval()。 setInterval()设置要重复调用的回调(在你的情况下每1000毫秒)。但是你在while循环中调用了setInterval(),所以你要设置多个并行执行的间隔。 2)setInterval()中的回调函数与代码的其余部分异步调用。所以你不能在回调中修改userObj.sec,并且看到它们会以你期望的方式影响你的while循环。 – RJM