变量超出范围时的JavaScript垃圾收集

时间:2009-10-22 13:38:13

标签: javascript garbage-collection

JavaScript是否支持垃圾收集?

例如,如果我使用:

function sayHello (name){
    var myName = name;
    alert(myName);
}

我是否需要使用“删除”删除myName变量,或者我只是忽略它?

5 个答案:

答案 0 :(得分:5)

没有。
delete用于从对象中删除属性,而不是用于内存管理。

答案 1 :(得分:4)

JavaScript支持垃圾回收。在这种情况下,由于您在函数中显式声明了变量,它将(1)在函数退出时超出范围并在此之后的某个时间收集,并且(2)不能成为delete的目标(每个参考文献链接如下)。

delete可能有用的地方是隐式声明变量,将它们放在全局范围内:

function foo()
{
    x = "foo";   /* x is in global scope */
    delete x;
}

但是,隐式定义变量是一种不好的做法,所以始终使用var并且您不必关心delete

有关详细信息,请参阅:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/delete_Operator

答案 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