javascript调用递归函数时堆栈何时耗尽?

javascript调用递归函数时堆栈何时耗尽?,javascript,recursion,Javascript,Recursion,我知道这个函数会出错,因为调用self函数时堆栈会耗尽 function loop() { loop(); } 我想做一个回调函数,调用self函数 第一: var load_function = new Promise(function(resolve, reject) { resolve() }); function loop() { load_function.then( function() { loop(); }).catch

我知道这个函数会出错,因为调用self函数时堆栈会耗尽

function loop() {
    loop();
}
我想做一个回调函数,调用self函数

第一:

var load_function = new Promise(function(resolve, reject) {
    resolve()
});

function loop() {
    load_function.then(
    function() {
        loop();
    }).catch(
    function() {
        loop();
    });
}
第二:

function loop() {
    setTimeout(loop, 3);
}
这些函数不会产生错误


在无限循环调用中使用这些函数安全吗?

这两个函数都涉及在当前调用堆栈清空后排队进入调用堆栈的回调,而不是无限期地添加到调用堆栈中。请注意,由于
load\u function
是一个单承诺,而不是一个函数,因此循环的结果将是调用
then()
一次又一次地重复同一个承诺。承诺只能解决一次。若递归调用任何函数,这将在一段时间后自动停止。我认为当函数循环结束时,堆栈可能会被清空,尽管回调离开了