2013-02-27 70 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 2013-02-27 08:44:34

+0

是的,我需要指定更好的「執行」 – fcalderan 2013-02-27 08:46:07

+0

的含義,所以它會在onreadystatechange被調用一段時間後收集垃圾嗎? – 2013-02-27 09:43:37