2015-11-03 4 views
-1

У меня есть короткий вопрос, только из любопытства. Предположим, у меня есть объект, который имеет массив как свойство this.arr = ["one", "two", "three", ...], и я заполняю этот массив элементами n.JavaScript, Память: Элементы в массиве

Что произойдет со всеми этими элементами, если я запустил this.arr = []. Удалены ли они, хранятся в памяти, просочились?

Спасибо!

+1

Возможный дубликат [Как освободить память в JavaScript] (http://stackoverflow.com/questions/8467350/how-to-free-up-the-memory-in-javascript) – felipsmartins

+0

Читать: [Javascript Управление памятью] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management) – felipsmartins

+0

Возможный дубликат [Как удалить массив в JavaScript?] (Http://stackoverflow.com/questions/1232040/how-to-empty-a-array-in-javascript) –

ответ

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 нет такой вещи, как «утечка памяти». Однако вы можете забыть избавиться от объекта, который вам больше не нужен. И если этот объект имеет ссылки на другие объекты, которые в терминах имеют ссылки на другие объекты, то не будет уничтожен ни один объект дерева.

В большинстве случаев, если вы используете временные переменные, вам не нужно беспокоиться об этом.

0

Удалены. На самом деле это быстрый способ опорожнения массива.

+0

Этот ответ довольно короткий, у вас есть для этого какие-то ресурсы? – areim

0

Он был удален. Если вы присвоите значение this.arr другой переменной, массив будет многократно использоваться, но другая переменная будет иметь другой адрес памяти, но адрес, который вы сохранили исходную переменную, будет опустошен.

0

Они будут удалены, если объекты строки больше не ссылаются ни на что. Строковые объекты предназначены для сбора мусора для удаления/удаления этих объектов.

Смежные вопросы