我有以下情况:
let func = () => {
//...
let id = setTimeout(() => {
console.trace();
clearTimeout(id);
func();
}, 2000);
}
func();
尽管我读到清除超时句柄将释放用于关闭的内存和处理程序本身,但我仍然很好奇堆栈信息是否可能泄漏。我故意放console.trace()
调用,看起来堆栈信息无限期地增长。这不是问题吗?我知道它不是在类似递归的堆栈上,在那里我们可能会遇到堆栈大小异常,但是我仍然担心堆栈信息会不断增长。
答案 0 :(得分:0)
不。 func
完成执行后,堆栈展开。
如果func是递归的,则堆栈看起来像:
[init] -> func -> func -> func -> func -> func -> ....
对于您而言,它是:
[init] -> func -> setTimeout
<---- <----
[timer] -> func -> setTimeout
<---- <----
[timer] -> func -> setTimeout
<---- <----
...