垃圾收集和关闭局部变量

时间:2013-02-27 08:32:06

标签: javascript garbage-collection closures

xmlHttp是否会收集垃圾,如果是,何时?

function foo (param)
{
    var xmlHttp = GetXmlHttpRequestObject();

    xmlHttp.onreadystatechange = function()
    {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
        {
            // do something involving param and xmlHttp.responseXML
        }
    }

    xmlHttp.open("GET", "GetAsyncData.ashx", true);
    xmlHttp.send();
}

1 个答案:

答案 0 :(得分:1)

是的,一旦执行了函数foo,垃圾收集器就会自动销毁变量(因为变量是本地的,因此不能在给定的范围之外使用)。

这也是为什么特别使用用var关键字声明的局部变量的良好做法的原因之一。

请注意,在您的特定上下文中,由于您执行异步ajax调用,您的函数在ajax调用仍在运行时返回,因此垃圾收集器将在返回该函数时销毁您的xmlHttp变量并且电话已经完成