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被分配任何其他值时,该对象将被收集。 您可以将其设置为null
, undefined
或其他任何内容并收集内存。
也就是说,它会在浏览器或任何JavaScript引擎收到时收集。
删除仅从对象中删除属性。 从此尝试访问该属性将返回undefined
。 大多数情况下,以下两行代码是等效的:
x["someProp"] = undefined;
delete x.someProp;
编辑:好的,内部两行不一样。 删除操作将从内存中删除“someProp”引用,而将其设置为undefined不会。 我认为。 我无法找到有关将变量或属性设置为未定义的规范中的任何内容,但我不认为这样做有什么特别之处。
需要注意的重要一点是,您将无法删除具有特定标志设置的属性,但可以将它们设置为null或undefined(如果它们未被setter包装并且甚至允许发生这种情况)。
链接地址: http://www.djcxy.com/p/27169.html