我請鼠標點擊下面的代碼:爲什麼clearTimeout不適用於此代碼?
clearTimeouts();
var inMotion = true, x = 0;
var shuffleTimer = setTimeout(function(){inMotion = false}, 3500);
var shuffleStart = setTimeout(oneShuffle, x);
function oneShuffle(){
x+=5;
if(inMotion === true){
console.log('Shuffling again');
//shuffle again
shuffleStart = setTimeout(oneShuffle, x);
} else {
//increment spins
spins++;
//reset spins if loadOrder been exhausted
spins === loadOrder.length ? spins = 0 : 0;
console.log(spins);
}
}
function clearTimeouts(){
console.log('Clearing timeouts')
clearTimeout(shuffleTimer);
clearTimeout(shuffleStart);
}
什麼應該發生的事情是,如果我點擊elment而inMotion
是true
兩個超時應該重置和我spins
計數器不應該增加對以前的點擊。然而,反而會發生什麼事情,無論如何,前一次超時都會增加自旋。爲什麼?
你'的console.log()'調用在那裏。你看到的日誌輸出的順序是什麼? – Pointy
使計時器成爲全球? - 也許可以在代碼的周圍放置一個互斥區域,以便如果您清除超時時間太晚,則不會影響任何內容。 –