使用javascript递归setTimeout函数,获取stackoverflow有风险吗?

By using javascript recursive setTimeout function, is it risky to get the stackoverflow?

使用javascript递归setTimeout函数,获取Whosebug有风险吗?

通过尝试此示例,您可以在浏览器控制台中看到堆栈在增长。为什么会这样?

var iteration = 0;
  function bar() {
    iteration++;
    console.log("iteration: " + iteration);
    console.trace();
    if(iteration < 5){
     setTimeout(bar, 5000);
    } 
  }

bar();

By using javascript recursive setTimeout function, is it risky to get the Whosebug?

没有。 setTimeout 注册一个处理程序,该处理程序将在计时器触发时由浏览器调用。到那时,堆栈已经展开(如果没有展开,安排超时的任务就不会结束,浏览器的 UI 将被锁定等待它结束)。

By trying this example you can see in browser console that the stack grows.

不,堆栈在下一次调用处理程序之前展开。如果您指的是 Chrome 的开发工具向您展示的异步 "stack" 条目,那么它们不是真正的堆栈,它们是开发工具的产物。 (启动你的计时器,观察两个滴答声,以便你在第二个滴答声中看到 "async" 条目,然后关闭你的控制台,再等待两个滴答声,然后重新打开它;注意没有任何 "async"条目 - 根本没有,甚至在关闭控制台之前你看到它都没有记录!)