我有一个简短的问题,只是出于好奇。
让我们说我有一个对象,它有一个数组作为属性this.arr = ["one", "two", "three", ...]
,我用n
元素填充这个数组。
如果我运行this.arr = []
,所有这些元素会发生什么。它们被删除,留在记忆中,泄露了吗?
谢谢!
答案 0 :(得分:2)
this.arr = []
将创建一个新的空数组并将其分配给arr
属性。如果程序中没有对前一个数组的引用,它最终将被垃圾收集(由JS引擎自动销毁)。但如果在某处仍然存在对它的引用,它仍将存在。
this.arr = [1, 2, 3, 4];
var backup = this.arr;
this.arr = [];
// backup still points to the array, so it won't be destroyed
如果您只是想删除数组而不再使用它,则可以改为this.arr = null
。
在JS中,没有"内存泄漏"。但是,你可以忘记摆脱你不再需要的物体。如果该对象引用了其他对象,这些对象在术语中引用了其他对象,那么树的单个对象将不会被销毁。
大多数情况下,如果您使用临时变量,您将不必担心它。
答案 1 :(得分:0)
删除它们。事实上,这是一种清空数组的快捷方法。
答案 2 :(得分:0)
它将被删除。如果将this.arr
的值赋给另一个变量,则该数组将是可重用的,但另一个变量将具有不同的内存地址,但是存储原始变量的地址将被清空。
答案 3 :(得分:0)
它们将被删除,如果字符串对象不再被任何引用。因此,字符串对象有资格进行垃圾收集以删除/释放这些对象。