内存管理——JavaScript模式和垃圾收集

memory management - JavaScript patterns and garbage collection

本文关键字:模式 管理 JavaScript 内存      更新时间:2023-09-26

一段时间以来,我一直在使用两个版本的JavaScript模式,我从Addy Osmani那里获得了模块模式。点击这里查看

这个模式的第一个版本使用对象字面值:

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();
考虑到上面的例子,这两种模式(不考虑任何事件侦听器)中的任何一种都是垃圾收集友好的(考虑到它们引用自己的方式)吗?

No。

两者都使用一个全局变量来固定API,因此在帧被卸载并从历史记录中删除之前将无法收集。

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