【发布时间】:2019-05-06 01:00:17
【问题描述】:
我有一个这样的JS函数
function check() {
...do something
}
现在,我想在脚本启动时和每天开始时(每天 00:00:01)运行它。我的代码现在看起来像这样
function check() {
...do something
let today = new Date();
let tomorrow = new Date();
tomorrow.setHours(0,0,1,0);
tomorrow.setDate(tomorrow.getDate()+1);
console.log("next check in", tomorrow-today);
setTimeout(() => { check() }, tomorrow-today);
}
check();
我在 check() 中使用 setTimeout。我认为这是糟糕的代码,因为它会创建一个循环,并且函数 check() 永远不会被清理。如何解决?
【问题讨论】:
-
“
check()永远不会被清理”是什么意思?你觉得什么是占用内存?你有没有做过任何分析来证明这里有内存泄漏? -
其实我并没有进行分析来证明存在内存泄漏。我认为检查功能需要等待 setTimeout 完成,然后才能将其销毁。但是 setTimeout 调用另一个 check() 函数,它将永远等待(调用另一个检查等等)。因此,加载到内存中的每个 check() 函数都不会被销毁。我说的对吗?
-
听起来你觉得可能的问题是堆栈溢出。请参阅答案以了解为什么
setTimeout()循环不会导致堆栈溢出。
标签: javascript memory-leaks settimeout