2010-05-17 78 views
0

我想知道下面提到的代碼中的內存泄漏。 JavaScript是否會自動收集垃圾?在本地範圍內引用全局變量

var aGlobalObject = SomeGlobalObject; 
function myFunction() { 
    var localVar = aGlobalObject; 
} 

我是否必須清除下面給出的內存。

var aGlobalObject = SomeGlobalObject; 
function myFunction() { 
    var localVar = aGlobalObject; 
    localVar = null;// or delete localVar 
} 

感謝

回答

2

該代碼中沒有內存泄漏。本地變量引用與全局變量相同的對象。當函數返回時,局部變量被刪除,因爲沒有任何引用了它。該對象本身仍然存在,因爲它仍然被全局變量引用。 (當我說「局部變量被刪除」:從技術上講,[隱]容器中的變量是不再有任何引用它,可用於垃圾收集,實際徵收可能稍後發生

JavaScript的確有垃圾收集。 delete關鍵字意味着在JavaScript中與在C++中不同的東西有完全。 Javascript對象具有屬性。您可以使用delete完全從物體中移除物業,例如:

var obj = {}; // Blank object 
obj.foo = 5; // `obj` now has a property called `foo` 
obj.foo = null; // `obj` STILL has a property called `foo`; its value is just null now 
delete obj.foo; // `obj` no longer has a property called `foo`