通过使用javascript递归setTimeout函数,获取stackoverflow是否有风险?

Mar*_*ark 3 javascript stack-overflow recursion settimeout

通过使用javascript递归setTimeout函数,获取stackoverflow是否有风险?

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

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

bar();
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

通过使用javascript递归setTimeout函数,获取stackoverflow是否有风险?

No.会setTimeout注册一个处理程序,当计时器触发时,该处理程序将被浏览器调用.到发生这种情况时,堆栈已经解开(如果没有,则计划超时的任务不会结束,并且浏览器的UI将被锁定等待它结束).

通过尝试此示例,您可以在浏览器控制台中看到堆栈增长.

不,在下一次调用处理程序之前,堆栈会展开.如果您指的是Chrome的devtools向您展示的异步"堆栈"条目,那些不是真正的堆栈,它们是devtools工件.(启动计时器,注意两个刻度,以便在第二个上看到"异步"条目,然后关闭控制台,再等两个刻度,然后重新打开它;注意没有任何"异步"条目 - 根本没有,在关闭控制台之前,甚至没有看到它的那个!)

  • 现在,如果问题是“我看到的这些(异步)堆栈条目是什么”,它就不会重复,但*实际提出的问题*确实是一个骗局......:-) (3认同)