所以,我想运行一个间隔函数,但有一个递归超时:
var runUpdater = function () {
setTimeout(() => {
console.log('something here')
runUpdater()
}, 1000)
}
这将在一个长期运行的服务上运行。我认为这最终会导致堆栈溢出,对吗?我的问题是:避免这种情况的最佳方法是什么?
最佳答案
不,不会出现堆栈溢出。每次调用 setTimeout
都会在事件循环中排队一条新消息。当执行 setTimeout 回调时,您将拥有一个深度为 1
的全新堆栈,该堆栈将在该执行线程完成时不再存在。例如,当达到最大堆栈大小时,以下代码将快速抛出 RangeError:
try {
!function func ( ) {
func();
}();
} catch ( e ) {
document.body.innerHTML = e.message;
}
但是这个版本将无限期运行而不会出现问题:
try {
!function func ( ) {
setTimeout( func, 0 );
}();
} catch ( e ) {
document.body.innerHTML = e.message;
}
关于javascript - 运行递归超时时避免堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34697067/