我对Javascript很新,我只是阅读以下文章。
您可以定义ajax连接 一次,并多次重复使用,并且 稍后开始和停止它。这是一个 例如:
var myAjaxRequest = A.io.request('test.html', {
method: 'POST',
data: {
key1: 'value1'
}
});
现在稍后,如果我想这样做 同样的ajax再次召唤,我只需要做 是电话:
myAjaxRequest.start();
如果我有一个非常频繁使用的拍卖页面,并且我想将myAjaxRequest连接用于用户从浏览器执行的所有操作,该怎么办? myAjaxRequest实例的生命周期规则是什么?我想它在页面刷新时被破坏了。但它还有什么东西可以摧毁它吗?假设该对象是在YUI沙箱中创建的,但没关系。
答案 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
方法,直到卸载页面。