An example :
var list = readHugeList();
var nextListItem = function() {
var item = list.pop();
if (item) {
setTimeout( nextListItem, 0);
// ^^^^^^^^ this line
}
};
How does use of setTimeout
prevent potential stackoverflow here? I understand concept of event queue as well as stack, but I'm having difficulty connecting the two.
Set timeout would not cause stack overflow, because it is asynchronous. It will just put the callback to the event queue and not block the execution.
In the first case:
setTimeout just puts the callback to event queue and the parent function exits after without busying the stack.
Even though the timeout is 0 ms, it will be called in the next event loop, thus not blocking the code in execution
var nextListItem = function() {
var item = list.pop();
if (item) {
setTimeout( nextListItem, 0);
}
};
In the second case:
Parent call the child function putting new entry into stack, even though the parents is not cleared from the stack.
Eventually more recursive calls would blow the stack.
var nextListItem = function() {
var item = list.pop();
if (item) {
nextListItem();
}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With