JavaScript支持垃圾回收吗?
例如,如果我使用:
function sayHello (name){
var myName = name;
alert(myName);
}
我需要使用“delete”删除
myName
变量吗,还是我可以忽略它?JavaScript支持垃圾回收吗?
例如,如果我使用:
function sayHello (name){
var myName = name;
alert(myName);
}
myName
变量吗,还是我可以忽略它?不是用于内存管理,delete
用于从对象中删除属性。
JavaScript支持垃圾回收。在这种情况下,由于您在函数内明确声明变量,因此它将(1)在函数退出时超出范围,并在此之后的某个时间被收集,以及(2)不能成为delete
的目标(参见下面链接的参考资料)。
delete
可能有用的地方是如果您隐式声明变量,这将使它们处于全局范围内:
function foo()
{
x = "foo"; /* x is in global scope */
delete x;
}
然而,隐式定义变量是一种不好的做法,因此请始终使用var
,这样您就不必担心delete
。
不必在意它 - 在sayHello函数完成后,myName超出作用域并被垃圾回收。
你不需要做任何事情,Ted,不需要删除这个变量。
参考:http://www.codingforums.com/archive/index.php/t-157637.html
正如其他人所提到的,当函数退出时,您的变量就会超出范围,因为它的作用域仅限于函数内部,因此垃圾回收器可以清理它。
但是,如果该变量被函数外部的某些东西引用,那么它可能不会被垃圾回收很长一段时间,甚至永远不会被回收,因为它仍然有一个引用。
您可能需要了解一下JavaScript中的作用域: http://www.webdotdev.com/nvd/content/view/1340/
使用闭包可能会导致内存泄漏,这可能是您试图处理的问题,并且与我提到的问题有关: http://www.jibbering.com/faq/faq_notes/closures.html