开发者

What do JavaScript objects outlast and when are they destroyed?

开发者 https://www.devze.com 2023-01-30 08:24 出处:网络
I\'m quite new to Javascript and I was just reading following article. 开发者_如何学Python you can define an ajax connection

I'm quite new to Javascript and I was just reading following article.

开发者_如何学Python

you can define an ajax connection once, and reuse it multiple times, and start and stop it later on. Here's an example:

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

Now later on, if I want to make that same ajax call again, all I have to do is call:

myAjaxRequest.start();

What if I had a very frequently used auction page and I wanted to use the myAjaxRequest connection for all actions a user does from his browser. What are the rules for lifetime of the myAjaxRequest instance ? I suppose it is destroyed on page refresh. But is it anything else that destroys it ? Let say that the object is created within YUI sandbox, but it doesn't matter.


Its a shame this was answered in comments because nobody gets closure (sorry, terrible pun). @Šime Vidas and @WaiLam deserve the credit but I will at least attempt to craft an answer:

While you have a reference to the object (though the variable myAjaxRequest) it will remain in memory until the document is unloaded. If you assign null to your variable (myAjaxRequest = null), and there are no other references to the object, then the garbage collector will reclaim the memory used to store it.

A reference can exist even if myAjaxRequest is a local variable within a function. The function can return a reference to the local variable, for example as a object property e.g:

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

    return {
        myRequest: myAjaxRequest
    };
}

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

or it can return a reference through a closure (excellent explanation here), e.g:

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

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

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

As long as you have a reference to your object it will not be garbage collected. You can safely call the start method until the page is unloaded.

0

精彩评论

暂无评论...
验证码 换一张
取 消