覆盖功能是否删除它们?

时间:2013-12-31 02:10:05

标签: javascript performance function

我想说的是:

for(var i = 0 ; i < 100000 ; i++)
{
    // I know, this is not recommended to do it that way...
    // Used it because it is the easiest way to create 
    // different functions to explain the question. 

    a = [ new Function('return ' + i) ];    
}
a = 0;

创建的功能是否被删除?或者它们仍然存在但无法再访问?我可以在此代码中遇到内存问题吗? (不谈论表现)

注意:我实际上并没有直接“覆盖”函数:我正在覆盖包含该函数的对象。

2 个答案:

答案 0 :(得分:7)

只要没有引用所述对象(包括函数),它们就会被垃圾收集。

例如,标记和扫描算法遍历对象以检查潜在的“垃圾”。一旦对象“无法访问”(任何代码都无法访问),它就会被标记为垃圾回收。

答案 1 :(得分:3)

在您的示例中,您创建了一个anonymous function,这意味着它是使用函数运算符定义的。换句话说,它就像一个对象,就像这个1+1这样的表达式一样,它是在运行时创建的。因为它是一个匿名函数,如果你停止引用它,它就不再被定义了,因此浏览器的垃圾收集会删除它。有关详细信息,我建议您查看this post