SetTimeout递归(Javascript)
下面的代码递归地播放音频元素并跟踪文本的迭代,这两种迭代都通过清除超时的按钮停止 如果将播放超时指定给外部功能SetTimeout递归(Javascript),javascript,recursion,Javascript,Recursion,下面的代码递归地播放音频元素并跟踪文本的迭代,这两种迭代都通过清除超时的按钮停止 如果将播放超时指定给外部功能nextThing,当单击停止按钮时,音频将在文本停止后再次播放。但是,在playTimeout的评论(内部)版本中,音频会立即停止 问题:a)为什么会发生这种情况?和b)我如何正确表达这一点,以便迭代和音频一起移动 function nextThing(millis,pitch){ setTimeout(playTone,millis,pitch); }; function t
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");
}
您的
nextThing
函数没有返回任何内容,计时器id被忽略,它将undefined
分配给playTimeout
function nextThing(millis, pitch) {
return setTimeout(playTone, millis, pitch);
// ^^^^^^
}
您的
nextThing
函数没有返回任何内容,计时器id被忽略,它将undefined
分配给playTimeout
function nextThing(millis, pitch) {
return setTimeout(playTone, millis, pitch);
// ^^^^^^
}
啊哈!因此,由于没有实际的ID值来清除超时,即将到来的音频超时按计划发生,即使相应的递归被破坏,因此不再调用。啊哈!因此,由于没有实际的ID值来清除超时,即将到来的音频超时按计划发生,即使相应的递归被破坏,因此不再调用。