Я только что прочитал этот вопрос и принял ответ: Что такое сборка мусора в JavaScript?
В ответе Noldorin ссылается на некоторые рекомендации Apple.Вот часть, которая меня интересует:
Используйте операторы delete.Всякий раз, когда вы создаете объект с использованием нового оператора, связывайте его с оператором удаления.Это гарантирует, что вся память, связанная с объектом, включая имя его свойства, будет доступна для сборки мусора.
Я всегда беру время, чтобы быть в курсе лучших практик, особенно если я могу уменьшить объем памяти своих сценариев.Поэтому я ушел, чтобы проверить некоторые вещи.Если я правильно понимаю, ниже приведен пример объекта, который удаляет себя после вызова метода:
var thing = function () {
var a_method, and_another;
a_method = function() { /* do stuff */ };
and_another = function() { /* do some other stuff*/ };
this.init = function() { a_method(); and_another(); };
};
delete new thing().init();
Обычно я обертываю все в функцию, вызывающую сам, и передам мои глобальные переменные, как указано выше.Все так же, как я бы это обычно делал, с той лишь разницей, что я добавил delete
прямо перед new
.
Код работает в любом случае.
Так что вопросэто: я делаю что-нибудь здесь?Есть ли какая-то польза от удаления ссылки на объект, который существует только внутри области действия функции?Или я просто заставляю вещи выглядеть запутанными?