我已经使用 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/