JavaScript对象的寿命是什么?它们什么时候被销毁?

时间:2010-12-12 14:24:20

标签: javascript ajax yui

我对Javascript很新,我只是阅读以下文章。

  

您可以定义ajax连接   一次,并多次重复使用,并且   稍后开始和停止它。这是一个   例如:

var myAjaxRequest = A.io.request('test.html', {
    method: 'POST',
    data: {
      key1: 'value1'
    }
});
  

现在稍后,如果我想这样做   同样的ajax再次召唤,我只需要做   是电话:

myAjaxRequest.start();

如果我有一个非常频繁使用的拍卖页面,并且我想将myAjaxRequest连接用于用户从浏览器执行的所有操作,该怎么办? myAjaxRequest实例的生命周期规则是什么?我想它在页面刷新时被破坏了。但它还有什么东西可以摧毁它吗?假设该对象是在YUI沙箱中创建的,但没关系。

1 个答案:

答案 0 :(得分:2)

令人遗憾的是,评论中回答了这一点,因为没有人关闭(对不起,可怕的双关语)。 @ŠimeVidas和@WaiLam值得赞扬,但我至少会尝试做出答案:

虽然您有对象的引用(尽管变量myAjaxRequest),但它将保留在内存中,直到文档被卸载。如果为变量(myAjaxRequest = null),指定null,则没有对该对象的其他引用,则垃圾回收器将回收用于存储它的内存。

即使myAjaxRequest是函数中的局部变量,也可以存在引用。该函数可以返回对局部变量的引用,例如作为对象属性,例如:

function sandbox () {
    var myAjaxRequest = A.io.request(/* constructor... */);

    return {
        myRequest: myAjaxRequest
    };
}

var mySandbox = sandbox();
mySandbox.myRequest.start();

或者它可以通过闭包(excellent explanation here)返回引用,例如:

function sandbox () {
    var myAjaxRequest = A.io.request(/* constructor... */);

    return {
        getRequest: function () {
            return myAjaxRequest;
        } 
    };
}

var mySandbox = sandbox();
mySandbox.getRequest().start();

只要你有对象的引用,它就不会被垃圾收集。您可以安全地调用start方法,直到卸载页面。