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)
通过使用javascript递归setTimeout函数,获取stackoverflow是否有风险?
No.会setTimeout注册一个处理程序,当计时器触发时,该处理程序将被浏览器调用.到发生这种情况时,堆栈已经解开(如果没有,则计划超时的任务不会结束,并且浏览器的UI将被锁定等待它结束).
通过尝试此示例,您可以在浏览器控制台中看到堆栈增长.
不,在下一次调用处理程序之前,堆栈会展开.如果您指的是Chrome的devtools向您展示的异步"堆栈"条目,那些不是真正的堆栈,它们是devtools工件.(启动计时器,注意两个刻度,以便在第二个上看到"异步"条目,然后关闭控制台,再等两个刻度,然后重新打开它;注意没有任何"异步"条目 - 根本没有,在关闭控制台之前,甚至没有看到它的那个!)