Ответ 1
Если переменная сохраняется (например, глобальная или часть некоторой постоянной структуры данных) и данные, на которые она указывает, являются большими, и вы хотите, чтобы эти данные имели право на сбор мусора, тогда вы правы, чтобы присвоить что-то маленькое этой переменной, undefined
или null
или ""
все будет работать. То, что вы делаете, - это очистка ссылки на большие данные, чтобы она имела право на сбор мусора. Если ничто другое в вашем javascript не ссылается на эти данные, оно может быть освобождено сборщиком мусора. Если что-то еще имеет ссылку на него, то он не может быть освобожден.
Например, если у вас есть массив из 10 000 элементов, хранящихся в глобальной переменной:
var largeDataArray = new Array(10000);
И вы заполнили большинство элементов данными, тогда вы можете позволить этой памяти иметь право на сбор мусора, назначив ей другое значение, например:
largeDataArray = null;
или если вы все еще хотите, чтобы это был массив:
largeDataArray = [];
Примечание: переменные, которые сами выходят из области действия (например, локальные переменные в функциях, которые не являются частью прочного закрытия) или переменные в объектах, которые сами выходят из области действия, не должны быть очищены вручную. Когда они выходят за рамки или когда родительский объект удаляется, данные, содержащиеся внутри, также будут иметь право на сбор мусора.
Таким образом, очистка переменной требуется только тогда, когда вы явно хотите освободить данные, которые хранятся в долговечной переменной, и обычно это имеет смысл только беспокоиться об этом, когда данные велики или у вас много которые содержат до нескольких мегабайт данных (использование памяти на более высоких уровнях памяти на смартфонах выше, чем в настольных браузерах).