gpt4 book ai didi

javascript - 通过setTimeout调用自身的函数会导致溢出吗?

转载 作者:行者123 更新时间:2023-12-01 03:47:12 27 4
gpt4 key购买 nike

给定一个像这样的函数。 。 .

function self_time() {
console.log('hi');
setTimeout(self_time, 1000);
}

这可能会导致堆栈溢出吗?我知道这不完全是一个递归调用,而且 javascript 是异步的,但是这样的东西可以无限期地运行而不耗尽资源吗?

像这样的 try-catch 情况又如何呢? 。 .

function try_it() {
try {
console.log('im trying something...');
} catch(e) {
//i failed so im going to try again in 1 second
setTimeout(try_it, 1000);
}
}

假设该函数无限期地失败,它会耗尽资源吗?

我知道 setInterval 是一种替代方案,但是成功时这样的调用将不再需要间歇性检查。

最佳答案

这两个函数都不会耗尽资源;实际上并没有发生递归,因为浏览器异步调用传递给 setTimeout 的函数。但是,您可以通过滚动您自己的 attemptEvery 实用程序来使您的逻辑更清晰,就像我在下面所做的那样:

function attemptEvery (ms, fn) {
var token = setInterval(function () {
try {
fn.apply(this, [].slice.call(arguments, 2))
clearInterval(token)
} catch (e) {}
}, ms)
}

attemptEvery(100, function () {

dangerousOperation()
console.log('Success!')
})

function dangerousOperation () {
console.log('Attempting dangerous operation!')
if (Math.random() < .6) throw Error()
}

关于javascript - 通过setTimeout调用自身的函数会导致溢出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com