JavaScript-属性和变量

时间:2014-06-27 06:54:20

标签: javascript memory

在我的代码中,我要删除自定义对象。我意识到,我们无法删除使用'var'声明的对象。 (阅读本文档后Delete operator)。

  • 我的大多数对象都是使用'var'声明和初始化的。它们不能在单个delete语句中删除(除非我遍历它并删除每个属性。) 我可以将它们设置为'null'。
  • 我的自定义对象的大小相对较大(可能会阻挡相当大的内存。

为了更好的内存管理和性能,我应该使用'properties'或'variables'来存储我的对象吗?它会有所作为吗?

请提供任何参考资料,以便更好地了解javascript中的“属性”和“变量”。

globalProp = {//can be deleted, it is a 'property' to global object.
'name': 'Mia',
'age': 34,
'sex': 'F'
};

var globalVar = {//can not be deleted with delete statement, it is variable of global object
'name': 'Lia',
'age': 25,
'sex': 'F'
};

(在上面的代码中,我们可以将globalProp称为'window.globalProp',但不能将globalVar称为window.globalVar。)

Have fiddle

1 个答案:

答案 0 :(得分:0)

JavaScript具有运行时和垃圾收集器以及一些复杂的清理和管理算法,任何试图干扰或加速它们都会相反地执行相反的操作,从而导致运行时损失。最好将内存管理留给底层运行时。

但是,您可能需要考虑以下几点:
1)尽可能避免全局变量。对于支持全局/静态变量的任何语言,这都是一个很好的建议。全局变量意味着没有范围的全局引用 - 只要(全局)引用持有它,引用的对象就会继续存在。如果全局变量是一个继续将子项附加到自身的数组或对象,则这种危险会更大。 这是导致托管语言内存泄漏的常见情况 2)避免循环引用 - 不要使一个成员变量指向不同的对象,并且该对象包含指向第一个对象的成员。这对垃圾收集器来说会很困难 3)编写干净,简单,可维护的代码。这似乎是无关的宣传,但更简单,更简洁,可维护的代码可能会增强编程器/编译器优化代码的能力。
4)不要假设代码如何影响速度。那里有很多层,你不能简单地假设任何东西。对代码进行基准测试以获得真实的事实 5)除非你需要(你可能没有),否则不要优化。

所以对于你的问题:尽可能用var声明任何内容。使用var声明变量将使它们成为本地变量 - 当函数结束时,引用将超出范围,GC可以开始更早地确定对象的销毁时间。声明没有var的对象将使它们成为全局 - 不清楚GC何时决定删除对象,从而减慢速度。 如你所知 - 声明变量全局可能导致许多错误,保持范围。不要使用delete。这是错的。