我已经看到了许多类似的问题,但是似乎没人能回答我的问题。

var mainDataObject = null; // Global

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


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

我看到的问题是随机出现mainDataObject为空。我无法重现该问题,因为使用各种浏览器和操作系统的随机用户都会遇到此问题。

最佳答案

这取决于在哪个上下文中创建mainDataObject

如果它是一个函数(上下文),则该函数结束时将从垃圾回收器中清除该变量。

如果它位于global(-context)之内,它将一直保留到您将其显式设置为null或页面被卸载为止。

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

07-26 06:55