2013-04-08 78 views
1

我不是JavaScript專業人士,所以我的問題可能看起來很荒謬。假設我有以下HTML塊:JavaScript對象分配問題

<div> 
    <script type="text/javascript"> 
     var variable_2 = new SomeObject(); 
    </script> 
</div> 

這顯然是在堆的SomeObject實例分配內存和variable_2的駐留在全球範圍內。

我的問題是:如果我通過使用AJAX再次生成了以前的HTML塊,那麼我將在全局上下文中爲變量2引用一個新分配的SomeObject實例,對吧?但是,那麼之前分配的實例會發生什麼?是垃圾收集還是內存泄漏?

另外,如果您可能包含對描述JavaScript內存管理最佳實踐的書籍或文章的參考?

+1

瞭解JavaScript的內存管理問計書籍和參考文獻是不鼓勵的......僅供參考 – Zyerah 2013-04-08 07:58:37

回答

0

查看this postthis post瞭解更多有關JS垃圾收集器的信息。但請注意,JS引擎之間的確切行爲可能略有不同。你可能想要發表一個關於eg的問題。詳細的技術說明請致電V8 forum

在我看來,我肯定會避免做你描述的,因爲它的不好的做法。事實上,如果它在一個像樣的JS引擎中造成了內存泄漏,我會感到很驚訝(

0

當一個對象變得無法訪問時,它將被垃圾回收。舊版本的Internet Explorer(版本6和7)問題是引用對象但無法訪問的對象不會被垃圾回收,從而導致內存泄漏,但這與您的示例無關,在您的示例中,一旦沒有對第一個對象的引用(即,當您重新分配變量)目標不可達,將垃圾收集。

您可以在https://developer.mozilla.org/en-US/docs/JavaScript/Memory_Management