0
下面的代碼以遞歸方式播放音頻元素並跟蹤對文本的迭代,這兩者都通過清除其超時的按鈕停止。SetTimeout遞歸(Javascript)
如果將playTimeout分配給外部函數nextThing
,則單擊停止按鈕後,音頻將在文本迭代停止後再播放一次。然而,在playTimeout的評論(內部)版本中,音頻立即停止。
問題:a)爲什麼會發生這種情況?和b)我怎樣才能恰當地說出這樣的迭代和音頻一起移動?
function nextThing(millis,pitch){
setTimeout(playTone,millis,pitch);
};
function timedCount(millis){
document.getElementById('txt').value=iteration;
playTimeout=nextThing(millis,"C3");
// playTimeout=setTimeout(playTone,millis,"C3")
doRecursion=setTimeout(function(){timedCount(millis)},millis);
iteration++;
console.log("made it");
}
啊哈!因此,由於沒有實際的ID值來清除超時時間,所以即將發生的音頻超時按計劃發生,即使相應的遞歸被破壞,因此不再被調用。 –