javascript - SetTimeout 递归 (Javascript)

标签 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");
}

最佳答案

您的 nextThing 函数没有返回任何内容,计时器 ID 被忽略,并且会将 undefined 分配给 playTimeout

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

关于javascript - SetTimeout 递归 (Javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44609995/

相关文章:

sql - SQL Server 函数中的递归游标不起作用

java - 如何预测递归方法的最大调用深度?

algorithm - 寻找树的深度?

JavaScript:数组声明上的 If 语句

javascript - 表格出现在我的下拉菜单前面

javascript - Jquery 在我的网站上不起作用

java - 如何在java中返回递归方法值

c++ - 在不使用 for 或 while 的情况下在排序数组中查找元素

javascript - 如何在一个 div 中声明 ng-show 和 ng-hide

javascript - form.length 总是返回我 1