0

这篇文章说以下代码会炸毁堆栈:

function fetchLatest() {
  $.getJSON('/wait?id=' + last_seen, function(d) {
    $.each(d, function() {
      last_seen = parseInt(this.id, 10) + 1;
      ul.prepend($('<li></li>').text(this.text));
    });
    fetchLatest();
  });
}

客户端 JavaScript 只是使用 jQuery 的 getJSON 方法对简单的 URL 端点执行长轮询 递归地执行此操作可能是一个坏主意,因为它最终会破坏浏览器的 JavaScript 堆栈,但它在演示中运行良好。

这是真的吗?如果是这样,我们如何防止这种情况发生?

4

1 回答 1

6

那不是真的。

因为getJSON是异步的,下一个fetchLatest()调用将在前一个调用完成后的某个时间开始。

如果您编写这样的同步代码,它将冻结,然后引发堆栈溢出。

于 2012-11-29T01:27:20.277 回答