【发布时间】:2019-11-18 22:46:00
【问题描述】:
我有以下场景:
let func = () => {
//...
let id = setTimeout(() => {
console.trace();
clearTimeout(id);
func();
}, 2000);
}
func();
虽然我读到清除超时句柄将释放闭包和处理程序本身的内存,但我仍然很好奇堆栈信息是否可能泄漏。我故意调用了console.trace(),看起来堆栈信息无限增长。这不是一个问题吗?我知道它不在类似递归的堆栈上,我们可能会遇到堆栈大小异常,但我仍然担心堆栈信息会不断增长。
【问题讨论】:
-
“故意调用console.trace(),看起来堆栈信息无限增长”什么意思?每个滴答声您只需获得一个控制台条目。大多数浏览器控制台甚至会在该行中添加一个计数器,而不是填充它。由于函数完成,它所占用的堆栈帧会自动清除,并且......就是这样。泄漏点在哪里?
-
可能是开发人员。唯一的事情?在 Chrome 开发者工具中,有一个“禁用异步堆栈跟踪”选项
标签: javascript recursion memory-leaks settimeout