我有一个JS函数,每隔几秒就在页面上调用一次。这是一个AJAX更新的事情。
作为一个函数,我声明了局部变量。我不想出于各种原因使用闭包或全局变量。
我从来没有考虑过这个问题,但是我是否需要在函数结束时释放/清除变量来释放内存,或者JS会自动为我做这个吗?
答案 0 :(得分:30)
一般来说,没有。使用var
声明的变量是本地变量,并在您返回时进行垃圾回收。如果省略var
,则变量是全局变量,并且在某些情况下使用delete
关键字对全局变量可能有用,但通常最好使用var
声明所有变量不污染window
命名空间。
delete
在使用基于原型的继承时很有用,例如:
function myclass() {
this.variable = 'myvalue'
...
delete this.variable // finished with this variable
}
var inst = new myclass()
请记住,如果inst
被删除或超出范围(垃圾收集),其中的所有属性也将被删除。 delete
对于从哈希表中删除项目也很有用:
var d = {}
d['blah'] = 'myvalue'
...
delete d['blah']
某些特定于浏览器的垃圾收集错误。例如,IE有时在清除DOM元素和闭包等属性方面存在问题,尽管IE8中的许多问题已经减少了。我相信。
答案 1 :(得分:6)
Javascript具有自动垃圾收集功能。你不需要解除任何东西。
答案 2 :(得分:1)
变量一旦超出范围就会被释放,在你的情况下,你的函数中声明的局部变量将被js垃圾收集器自动释放,你不必担心它们。