假设我有以下功能:
function myfunc() {
var data = [];
for (var i=0; i<10; i++) {
data[i] = {foo:"bar"};
}
// do something with data
}
在函数结束时,我不再需要任何数据。它需要什么才能被释放?
据我所知,如果无法从全局对象中获取某些内容,则会进行某些操作。如果data
无法访问,那么内部的所有元素也将无法访问,因为data
是对它们的唯一引用。那么,data
以及GCable中的所有内容的正确方法是什么?
如果我把它放在函数的末尾,data = null
会不会这样做?
我甚至需要做点什么吗?由于data
是myfunc()
中的局部变量,因此一旦函数完成,它不应该被销毁,从而使data
GCable中的数据成为可能吗?
答案 0 :(得分:2)
是的,你不需要做任何事情。
如果没有其他对刚刚超出范围的对象的引用,它们将被垃圾收集。
这些其他引用可能来自意外的位置(例如,在函数调用中存活的意外闭包,或者将内容附加到浏览器DOM),但通常该机制非常可靠。它也会处理参考周期。