JavaScript 模式和垃圾收集

标签 javascript memory-management memory-leaks garbage-collection

我已经使用 JavaScript 模式的两个版本一段时间了,这是我从 Addy Osmani 那里学到的,称为模块模式。 view it here

此模式的第一个版本使用对象文字:

var x = {
  b: function() {
    return 'text';
  },
  c: function() {
    var h = this.b();
    h += ' for reading';
  }
}
alert(x.b()) // alerts text.

而另一个版本使用自执行函数:

var y = (function() {
     var first = 'some value';
     var second = 'some other value';
     function concat() {
       return first += ' '+second;
     }

     return {
       setNewValue: function(userValue) {
         first = userValue;
       },
       showNewVal: function() {
         alert(concat());
       }
     }
})();

y.setNewValue('something else');
y.showNewVal();

鉴于上面的示例,这两种模式(不考虑任何事件监听器)是否适合垃圾回收(考虑到它们引用自身的方式)?

最佳答案

没有。至于什么时候变得无法访问,没有什么区别。

两者都使用将 API 固定到位的全局变量,因此在框架被卸载并从历史记录中删除之前不会被收集。

第二个分配并保留一个额外的激活帧(对于模块本地第一个第二个),但这是一个相当小的成本。

关于JavaScript 模式和垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325323/

相关文章:

javascript - 在 Highcharts 条形图中绘制自定义条形

javascript - Perl 的 WWW::Mechanize 如何扩展用 JavaScript 添加到自身的 HTML 页面?

c# - 如何配置 web.config 以允许任意长度的请求

java - 当我将数组参数分配给构造函数中的成员时会发生什么?

c++ - C++中的内存管理。

javascript - 每 10 秒更新一次用户位置 - 从 mysql 获取位置

c# - 帮助破译 logcat 输出 - 过多的 JNI 全局引用

iphone - iPhone中使用NSData的内存泄漏问题

c 清理未使用的线程

c++ - 什么是 "allocation context"?