【问题标题】:jQuery ajax scope memory leakjQuery ajax 范围内存泄漏
【发布时间】:2012-10-25 19:23:13
【问题描述】:

不知道下面的伪jQuery代码是否会发生内存泄漏(因为成功回调总是有_this的引用)?

var _this = this;

$.ajax({
  url: "foo",
  type: "POST",
  data: data,
  success: function() {
      // Do stuff with _this
      _this.doStuffs();
})

【问题讨论】:

  • 那是因为你在更高的范围内声明了_this,并且变量仍然可以访问?
  • _this 将始终可用。这就是为什么我想知道这种模式是否会导致任何内存泄漏?我认为这可能是因为“成功”回调将始终引用 _this(因此垃圾收集不会拾取它)
  • 我不是这方面的专家,但是当声明一个变量时,它将在该范围内或更低范围内的函数中可用,该成功函数没有什么神奇的不同,_this 变量是可访问的,因为它已被声明在更高的范围内,就像在任何其他函数中一样,这就是通常编写 javascript 的方式。

标签: javascript jquery memory-leaks closures


【解决方案1】:

这段代码在函数中吗?

如果是(我猜是这样),在 ajax 调用完成或失败后,_this 将无法被垃圾回收所识别。所以理论上没有理由担心这里的内存泄漏。

【讨论】:

    【解决方案2】:

    我看不到那里有内存泄漏。成功回调应该在被调用后被垃圾收集(必须正确实现,你做对了 - 但它 由 jQuery 和浏览器正确完成,甚至可能在 IE 中)。之后,_this 对象也可以被收集(如果没有从外部引用) - 但当然不是在此之前,这就是关闭的目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      相关资源
      最近更新 更多