javascript - 对ajax的递归调用导致内存泄漏?

标签 javascript jquery ajax

以下代码逻辑是否会导致原始调用的堆栈帧包含来自每个后续调用的内存(导致内存使用过多)?

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/

相关文章:

javascript - 洪水填充算法选择具有最少邻居数的像素

javascript - Highcharts 工具提示 - 访问系列数据数组中的 "z"值

javascript - jQuery:滚动时多次克隆div

javascript - v-on :change method only triggering a get request once (Vue. js)

javascript - 为什么这个测验不能正常进行?

javascript - 获取数字之和导致 NaN

javascript - jQuery 事件第二次发生

jquery - 谷歌地图街景全景滚轮错误仍然捕获滚轮

javascript - 如何在发布到服务器之前正确地将文件附加到 formData?

javascript - 使用 AngularJS $http 或 native javascript (xhr) 替换同步 $.ajax() 调用