从JavaScript中的局部变量释放内存

Bob*_*Bob 30 javascript memory

我有一个JS函数,每隔几秒就在页面上调用一次.这是一个AJAX更新的事情.

作为一个函数,我声明了局部变量.我不想出于各种原因使用闭包或全局变量.

我从来没有考虑过这个问题,但是我是否需要在函数结束时释放/清除变量来释放内存,或者JS会自动为我做这个吗?

cry*_*ryo 30

一般来说,没有.声明的变量var是本地变量,返回时会收集垃圾.如果省略var则变量是全局的,并且delete在某些情况下使用关键字对全局变量可能有用,但通常最好是声明所有变量var以不污染window命名空间.

delete 在使用基于原型的继承时很有用,例如:

function myclass() {
    this.variable = 'myvalue'
    ...
    delete this.variable // finished with this variable
}
var inst = new myclass()
Run Code Online (Sandbox Code Playgroud)

请记住,如果inst删除或超出范围(垃圾回收),其中的所有属性也将被删除.delete从哈希表中删除项目也很有用:

var d = {}
d['blah'] = 'myvalue'
...
delete d['blah']
Run Code Online (Sandbox Code Playgroud)

一些特定于浏览器的垃圾收集错误.例如,IE有时在清除DOM元素和闭包等属性方面存在问题,尽管IE8中的许多问题已经减少了.


Max*_*keh 6

Javascript具有自动垃圾收集功能.你不需要解除任何东西.


Mah*_*aga 3

变量一旦超出范围就会被释放,在你的情况下,在你的函数内部声明的局部变量将被js垃圾收集器自动释放,你不必担心它们。

  • 这不是事实。任何 JS 实现中都没有引用计数,只有垃圾回收。所有未引用的变量将在下次收集后释放,而不是“一旦超出范围”。 (2认同)