【发布时间】:2011-02-10 12:15:14
【问题描述】:
我有一个 JS 函数,每隔几秒就会在页面上调用一次。这是一个 AJAX 更新的东西。
作为一个函数,我声明了局部变量。由于各种原因,我不想使用闭包或全局变量。
我从来没有考虑过这个,但是我需要在函数末尾释放/清除变量来释放内存还是 JS 会自动为我做这个?
【问题讨论】:
标签: javascript memory
我有一个 JS 函数,每隔几秒就会在页面上调用一次。这是一个 AJAX 更新的东西。
作为一个函数,我声明了局部变量。由于各种原因,我不想使用闭包或全局变量。
我从来没有考虑过这个,但是我需要在函数末尾释放/清除变量来释放内存还是 JS 会自动为我做这个?
【问题讨论】:
标签: javascript memory
变量一旦超出范围就会被释放,在你的情况下,在你的函数中声明的局部变量将被 js 垃圾收集器自动释放,你不必担心它们。
【讨论】:
Javascript 具有自动垃圾收集功能。你不需要释放任何东西。
【讨论】:
一般来说,不会。使用var
声明的变量是本地变量,在您返回时会被垃圾回收。如果省略var
,则变量是全局变量,在某些情况下,使用delete
关键字可能对全局变量有用,但通常最好使用var
声明所有变量,以免污染@987654326 @命名空间。
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 中已经减少了许多这些问题。
【讨论】: