我应该自己释放分配的内存,还是有一种垃圾收集器?
在JavaScript中使用以下代码是否可以?
function fillArray()
{
var c = new Array;
c.push(3);
c.push(2);
return c;
}
var arr = fillArray();
var d = arr.pop()
感谢
答案 0 :(得分:8)
引自Apple JavaScript Coding Guidelines:
使用删除语句。无论何时你 使用new创建一个对象 声明,将其与删除配对 声明。这确保了所有 与对象关联的内存, 包括它的属性名称,是 可用于垃圾收集。该 删除语句将在更多内容中讨论 “释放物体。”
这表示您使用delete
命令,然后允许垃圾收集器在您使用完毕后释放为Array
分配的内存。 delete
语句仅删除引用的要点值得注意,因为它与C / C ++中的行为不同,后者没有垃圾回收,delete
立即释放内存。
答案 1 :(得分:3)
变量arr
和d
将作为全局变量存在,并且在垃圾收集器收集之前一直存在。
变量将在全局对象上设置为属性,即浏览器环境中的window
,但由于它们是使用var
声明的,they will not be deletable from the global object.
在您的特定情况下,最佳操作方法可能是在完成变量后将null
分配给变量。您可能还想考虑将其范围包含在函数中,并在该函数内执行您需要执行的操作。
答案 2 :(得分:2)
JavaScript中的内存管理是自动的,并且有一个垃圾收集器(GC)。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
您无法明确删除变量d
和arr
,但您可以通过将变量设置为其他内容(例如null
)来删除对其值的引用,以允许GC将它们从记忆中删除。
arr = null;
d = null;
请注意,delete
关键字仅删除对象属性。