以下代码逻辑是否会导致原始调用的堆栈帧包含来自每个后续调用的内存(导致内存使用过多)?
function foo (arg) {
bar(arg);
}
function bar (arg) {
$.ajax({
success: function (data) {
if (data['result'] == 'continue') {
bar(data['nextarg']);
} else if (data['result'] == 'done') {
alert('done!');
}
}
});
}
最佳答案
您的代码不是递归的。 $.ajax
是异步的,因此堆栈指针不会等待 bar
返回。
相反,$.ajax
触发一个异步进程,然后继续,直到它命中显式或隐式返回。在您的情况下,bar
末尾有一个隐式返回。
您的函数消耗的内存不会比它应该消耗的多。
function bar (arg) {
// calls $.ajax, which is async, so it fires "whenever"
$.ajax({
// when the ajax is complete/successful, this function is called
success: function (data) {
if (data['result'] == 'continue') {
bar(data['nextarg']);
} else if (data['result'] == 'done') {
alert('done!');
}
}
})
// exits immediately after
}
关于javascript - 对ajax的递归调用导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918556/