JavaScript是否支持垃圾收集?
例如,如果我使用:
function sayHello (name){
var myName = name;
alert(myName);
}
我是否需要使用“删除”删除myName
变量,或者我只是忽略它?
答案 0 :(得分:5)
没有。
delete
用于从对象中删除属性,而不是用于内存管理。
答案 1 :(得分:4)
JavaScript支持垃圾回收。在这种情况下,由于您在函数中显式声明了变量,它将(1)在函数退出时超出范围并在此之后的某个时间收集,并且(2)不能成为delete
的目标(每个参考文献链接如下)。
delete
可能有用的地方是隐式声明变量,将它们放在全局范围内:
function foo()
{
x = "foo"; /* x is in global scope */
delete x;
}
但是,隐式定义变量是一种不好的做法,所以始终使用var
并且您不必关心delete
。
答案 2 :(得分:3)
忽略它 - 在sayHello函数完成后,myName超出范围并获得gc'ed。
答案 3 :(得分:1)
你不需要做任何事情,也不需要删除这个变量。
参考:http://www.codingforums.com/archive/index.php/t-157637.html
答案 4 :(得分:1)
正如其他人提到的那样,当函数退出时,你的变量超出范围,因为它的范围就在函数内,所以gc可以清理它。
但是,该变量可能被函数外部的某些东西引用,然后它会暂时不会被gc',因为它仍然有一个对它的引用。
您可能想要了解javascript中的范围: http://www.webdotdev.com/nvd/content/view/1340/
使用闭包可以创建内存泄漏,这可能是您尝试处理的问题,并且与我提到的问题有关: http://www.jibbering.com/faq/faq_notes/closures.html