I came across a function where it had a setTimeout
inside with a timeout growing exponentially (timeout *= 2)
.
let timeout = 10000
function foo() {
// doSomething without breaking, returning
setTimeout(foo, timeout)
timeout *= 2;
}
foo()
It seems that this should not be a problem and intuitively feels like setInterval
is kinda doing the same already (having an infinite loop until it's cancelled if ever), however, my question is in the approach itself.
This is not a recursive function call. The call to setTimeout
will cause foo
to be called by the JavaScript event loop at a later time.
This code will not cause a stack overflow or any such problems. It should be completely safe.
To understand how this works in-depth, I suggest reading up on the JS event loop and microtasks.