我想設置一個計時器,以便它顯示用戶的秒數和最小值,我使用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