An example :
var list = readHugeList();
var nextListItem = function() {
var item = list.pop();
if (item) {
setTimeout( nextListItem, 0);
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();
}
};