我想说的是:
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;
创建的功能是否被删除?或者它们仍然存在但无法再访问?我可以在此代码中遇到内存问题吗? (不谈论表现)
注意:我实际上并没有直接“覆盖”函数:我正在覆盖包含该函数的对象。
答案 0 :(得分:7)
只要没有引用所述对象(包括函数),它们就会被垃圾收集。
例如,标记和扫描算法遍历对象以检查潜在的“垃圾”。一旦对象“无法访问”(任何代码都无法访问),它就会被标记为垃圾回收。
答案 1 :(得分:3)
在您的示例中,您创建了一个anonymous function,这意味着它是使用函数运算符定义的。换句话说,它就像一个对象,就像这个1+1
这样的表达式一样,它是在运行时创建的。因为它是一个匿名函数,如果你停止引用它,它就不再被定义了,因此浏览器的垃圾收集会删除它。有关详细信息,我建议您查看this post。