SetTimeout递归(Javascript)

时间:2017-06-17 22:32:06

标签: javascript recursion

下面的代码递归地播放音频元素并跟踪迭代到文本,这两个文件都通过一个清除超时的按钮停止。

如果将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");
}

1 个答案:

答案 0 :(得分:2)

您的nextThing函数未返回任何内容,系统会忽略计时器ID,并将undefined分配给playTimeout

function nextThing(millis, pitch) {
    return setTimeout(playTone, millis, pitch);
//  ^^^^^^
}