2013-04-08 111 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