Является ли JavaScript (чистый, а не jQuery, если это имеет значение) знать, чтобы очистить/освободить/освободить от последней ссылки на объект в функции «с задержкой» вызывается из таймера или события?JavaScript очистка (локальных) объектов, на которые ссылаются функции «с задержкой»
Возьмем следующий код:
function myInitFunc()
{
var myInitObj = new Object();
myInitObj.properties = lotsOfStuff;
var myDelayedInitFunc = function()
{
doSomethingWith(myInitObj);
// I shall not be accessing myInitObj again now.
};
// Let's say, *one* of the following:
setTimeout(myDelayedInitFunc, 1000);
window.addEventListener('load', myDelayedInitFunc);
document.addEventListener('DOMContentLoaded', myDelayedInitFunc);
}
Обратите внимание, что myDelayedInitFunc()
намеренно доступа к переменной myInitObj
, который является локальным для myInitFunc()
.
В, скажем, http://javascript.info/tutorial/memory-leaks он утверждает: «Функции, используемые в setTimeout/setInterval, также упоминаются внутри и отслеживаются до завершения, а затем очищаются». Понимает ли это «очистка», что он может избавиться от myInitObj
, а также от самой функции? Я вроде догадываюсь, что это так.
Как насчет двух примеров событий? Хотя мы знаем, что это «одноразовые» события, я предполагаю, что ни myDelayedInitFunc
, ни myInitObj
не будут очищены?
Если это так, что некоторые из них делают не убирать, я должен сделать myDelayedFunc()
установить myInitObj = null;
в его конце так, чтобы минимизировать потери?
Я ценю ваш быстрый ответ. Действительно ли «нет необходимости очищать» действительно относится к тем * событиям *, а также к 'setTimeout'? Я могу понять последнее, но для событий, чтобы очистить это означает, что JavaScript понимает, что эти два имени событий вызываются только один раз? Мне нравится понимать теорию *, если это возможно. – JonBrave
Теория варьируется в зависимости от того, с какого браузера вы ее просматриваете, поскольку каждый браузер имеет другую реализацию сборщика мусора. Если вы хотите больше узнать о сборке мусора [прочитать это] (http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection) ... –
Интересное чтение в нем, хотя оно и было не проливайте света на ситуации, о которых я спрашивал. Однако я соглашусь с вашим утверждением, что это не то, о чем я должен беспокоиться, и отметить ваш ответ как решение. – JonBrave