Я создаю что-то для мобильных устройств и хотел бы как-то очистить нулевые объекты, переменные, чтобы освободить немного памяти. Здесь у меня есть два быстрых примера, обе являются анонимными функциями, как я считаю, но какой способ лучше или более правильный подход? Извините, если я все неправильно понял. Мне кажется, что оба делают одно и то же, хотя мне больше нравится первый, поскольку объекты не будут создаваться, пока они мне не понадобятся. Вторая версия сразу же выполняла код для создания переменных, объектов и т. д., но не выполняла основную функцию сборки, пока она мне не понадобится.
Я просто пытаюсь выяснить, какой способ более распространен. Я знаю, что такие новички, как я, в основном неправильно понимают использование анонимных функций.
Версия 1
var app = function() {
//create variables, objects
var a = 'Data 1';
var b = 'Data 2';
//do some things
console.log(a + ', ' + b);
//do a cleanup
app.cleanup = function() {
a = null;
b = null;
console.log(a, b);
}
}
setTimeout(app, 200);
Версия 2
var app = {};
(function(){
//create variables, objects
var a = 'Data 1';
var b = 'Data 2';
app.build = function(){
//do some things
console.log(a + ', ' + b);
}
//do a cleanup
app.cleanup = function(){
a = null;
b = null;
console.log(a, b);
}
setTimeout(app.build,200);
})();
Позже в html или событии
<input type="button" onclick="app.cleanup()" value="clean" />
delete obj.yourReference
, /reference = null
/reference = undefined
), и пусть сборщик мусора сделает все остальное. - person Matt   schedule 29.11.2011app.cleanup()
, иa
иb
будут автоматически утилизированы сборщиком мусора, так как ничто не содержит ссылки на них после завершения выполнения функции. - person Matt   schedule 29.11.2011app
.cleanup
удалит строки, но определения переменных и объявление функции останутся без дела. Кроме того, что произойдет, если кому-то снова понадобятся переменные? Они ушли! Как только вы закончите использовать ресурс, удалите ссылку на него, и сборщик мусора обработает его. - person Matt   schedule 29.11.2011app
находится в глобальной области видимости,window
содержит ссылку на него. Если вы сделаетеdelete window.app
илиapp = null
(при условии, что ничто другое не содержит ссылку на него; например,var x = window.app
), функция будет удалена. - person Matt   schedule 29.11.2011someName
, то до тех пор, пока вы не присваиваете переменные чему-либо, что сохраняется после прекращения выполнения функции, или возвращаете ссылку на одну из переменных, все они будут восстановлены. Если вы видите jsfiddle.net/vQtZN, вы можете видеть, что ниobj2
, ниobj1
не восстанавливаются, поскольку ссылка для них все еще существует (поскольку из функции возвращаетсяobj2
). Однакоobj3
не упоминается и поэтому будет истребован. - person Matt   schedule 29.11.2011