1

我不是 JavaScript 专业人士,所以我的问题可能看起来很荒谬。假设我有以下 HTML 块:

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

这清楚地为 SomeObject 实例在堆上分配内存,而 variable_2 驻留在全局上下文中。

我的问题是:如果我使用 AJAX 再次生成了前一个 HTML 块,那么我将在全局上下文中让 variable_2 引用新分配的 SomeObject 实例,对吗?但是,之前分配的实例会发生什么,是垃圾收集还是内存泄漏?

此外,您是否可以引用描述 JavaScript 内存管理最佳实践的书籍或文章?

4

2 回答 2

0

当一个对象变得不可访问时,它将被垃圾收集。旧版本的 Internet Explorer(版本 6 和 7)存在一个问题,即相互引用但无法访问的对象不会被垃圾收集,从而导致内存泄漏。但是,这与您的示例无关。在您的示例中,一旦不再引用第一个对象(即,当您重新分配变量时),该对象将变得无法访问并且将被垃圾收集。

您可以在https://developer.mozilla.org/en-US/docs/JavaScript/Memory_Management阅读有关 JavaScript 内存管理的信息

于 2013-04-08T08:24:14.150 回答
0

查看这篇文章这篇文章了解更多关于 JS 垃圾收集器的信息。但是请注意,JS 引擎之间的确切行为可能略有不同。您可能想在例如上发布问题。V8论坛有详细的技术解释。

在我看来,我当然会避免做你描述的事情,因为它是不好的做法。实际上,如果它在一个像样的 JS 引擎中导致内存泄漏,我会感到惊讶(无论是 .

于 2013-04-08T08:03:04.457 回答