在构造函数中抛出异常会导致内存泄漏:source 1,source 2。某些OO语言(如C ++,C#,Java)也是如此。我想知道JavaScript是否容易受到同样的内存泄漏问题的影响?
为了说明,我有这个JS代码:
Widget = function(){
console.log("Widget constructor");
};
Foo = function(){
console.log("Foo constructor");
this.w = new Widget();
throw new Error();
};
Foo.prototype.dispose = function() {
delete this.w;
};
var f = new Foo;
f.dispose();
显然我dispose()
永远不会被调用,但在这种情况下,我很好奇f.w
对象的命运是什么?它是否保留在内存中并且无法以任何方式清除(导致内存泄漏)?或者垃圾收集器可能足够智能并且认识到它没有在任何地方被引用并实际处理它?这是如何由不同的JS引擎处理的?如果是真的那么如何避免呢?