【问题标题】:jQuery/JavaScript: is the garbage collector clearing my variables?jQuery/JavaScript:垃圾收集器是否正在清除我的变量?
【发布时间】:2011-02-04 15:33:07
【问题描述】:

我见过很多类似的问题,但似乎没有人回答我的问题。

var mainDataObject = null; // Global

// Called when DOM is ready with $(function() { ... })
$.ajax({
    type: "GET",
    dataType: "json",
    url: '...',
    success: function(json) {
        mainDataObject = json;
    }
});

mainDataObject 或其内容会在一段时间后被清除吗?这取决于浏览器吗?请注意,我需要该变量在页面的整个生命周期中持续存在。

我看到的问题是,mainDataObject 似乎随机被清空了。我无法重现该问题,因为它发生在使用各种浏览器和操作系统的随机用户身上。

【问题讨论】:

  • ajax 调用的范围是什么?

标签: javascript jquery garbage-collection


【解决方案1】:

这取决于创建mainDataObject 的上下文。

如果是函数(-context),则在函数结束时从垃圾收集器中清除变量。

如果它在全局(-context)中,它将一直存在,直到您将其明确设置为 null 或页面被卸载。

当然,如果您以某种方式在某处创建了一个闭包,那么在创建mainDataObject 的上下文上关闭的函数会将Activation object 复制到它的[[Scope]] 中,并且内存似乎不会被清除。

【讨论】:

  • 是的,抱歉,我添加了更多信息 - mainDataObject 是全局的。
  • mainDataObject 在本例中被声明为全局(高于 $.ajax)
  • 这不是真的。当函数内部有闭包时,只要在某个地方引用了闭包函数,变量就会一直存在。
  • @Dario:如果它是在全局对象中声明的,那么只要您的页面存在,它就应该包含它的值。您需要明确清除(null)它的值。
  • @BiAiB:我想我已经讲过了。
【解决方案2】:

只要您可以引用它,任何 javascript 变量都会持续存在。

您需要担心的是变量不会被垃圾回收,而不是相反。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多