2013-02-27 2 views
0

Будет ли 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

Да, сборщик мусора уничтожит автоматически переменную как только функция foo была выполнена (так как переменная является локальной и, следовательно, она не может быть использована за пределами данной сферы).

Это также одна из причин, по которой рекомендуется использовать локальные переменные, объявленные с ключевым словом var.

Обратите внимание, что в вашем конкретном контексте, поскольку вы выполняете асинхронный вызов ajax, ваша функция возвращается, пока вызов ajax все еще работает, поэтому сборщик мусора будет уничтожать вашу переменную xmlHttp, когда возвращаются обе функции и вызов было заполнено

+1

Не совсем. Если запрос является асинхронным, он может содержать закрытие контекста выполнения функции, который мешает ему собирать мусор даже при продолжении выполнения другого кода. – RobG

+0

Да, мне нужно уточнить значение «выполненного» – fcalderan

+0

, так будет ли это сбор мусора некоторое время после того, как вызывается onreadystatechange? –

Смежные вопросы