Why the function called by setTimeout has no callstack limit?

setTimeout is asynchronous (it returns before executing the callback), and the callback will be executed on a new, empty stack frame. That’s the whole purpose. It will never overflow the stack.

It is not a recursive call, for which scope (in case of a non-tail-call-optimized function) would need to be retained. But that would also mean that the function became blocking, which is not what you want.

Leave a Comment