JavaScript新的关键字和内存管理

在C ++未来就很难晶到我的脑海里,每次我叫new我打电话delete 。 在JavaScript中,我发现自己偶尔会在代码中调用new代码,但是(希望)浏览器中的垃圾收集功能会为我处理混乱。

我不喜欢这样 - JavaScript中是否有delete方法,并且我是如何使用它与C ++不同的?

谢谢。


var component = new Component();
component = null; // delete this at next garbage collection

顺便提一下,“新”关键字在JavaScript中并不是真正必要的,并且与分配内存没有任何关系(直接)。 所有“新”都是传递一个新的空对象,称为“this”(this = {})作为函数的隐藏参数。

var MyClass = function(){
    // fresh empty object "this" gets passed to function
    // when you use the "new" keyword 
    this.method = function(){}
}

var myInstance = new MyClass();

Javascript可以通过嵌套闭包和多个“this”变量在不同范围内浮动,从而获得多毛。 我更喜欢这样做:

var MyNoNewClass = function(){
    // I find this more explicit and less confusing
    var self = {}
    self.method = function(){}
    return self;
}

var myNoNewInstance = MyNoNewClass()

所有的JavaScript内存都被引用,但不是传统意义上的。 内存不是由内存地址引用,而是由字符串引用。 在这个代码中:

var x = new someObj();

该对象从该点开始被字符串“x”引用。 x不是指向堆上某些内存的指针。 如果您分配了xa属性,则:

x.someProp = 42;

然后someProp是引用值42的内存中的字符串。因此,您可以使用数组符号通过字符串表示来访问它:

x["someProp"]++;

这也是为什么变量可以保持任何值,因为它们不需要大小。

当没有更多的字符串(也就是变量或属性名称)引用它时,内存将在JavaScript中被有效地收集。 当x被分配任何其他值时,该对象将被收集。 您可以将其设置为nullundefined或其他任何内容并收集内存。

也就是说,它会在浏览器或任何JavaScript引擎收到时收集。

删除仅从对象中删除属性。 从此尝试访问该属性将返回undefined 。 大多数情况下,以下两行代码是等效的:

x["someProp"] = undefined;
delete x.someProp;

编辑:好的,内部两行不一样。 删除操作将从内存中删除“someProp”引用,而将其设置为undefined不会。 我认为。 我无法找到有关将变量或属性设置为未定义的规范中的任何内容,但我不认为这样做有什么特别之处。

需要注意的重要一点是,您将无法删除具有特定标志设置的属性,但可以将它们设置为null或undefined(如果它们未被setter包装并且甚至允许发生这种情况)。

链接地址: http://www.djcxy.com/p/27169.html

上一篇: JavaScript new keyword and memory management

下一篇: How java G1 collected object for garbage collection?