2016-03-29 2 views
0

Является ли 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; в его конце так, чтобы минимизировать потери?

ответ

1

Да, вам не нужно очищать эту ссылку. Если вы обеспокоены тем, что ваш JS-код может иметь утечки памяти, вы должны, возможно, прочитать его на memory profiling.

+0

Я ценю ваш быстрый ответ. Действительно ли «нет необходимости очищать» действительно относится к тем * событиям *, а также к 'setTimeout'? Я могу понять последнее, но для событий, чтобы очистить это означает, что JavaScript понимает, что эти два имени событий вызываются только один раз? Мне нравится понимать теорию *, если это возможно. – JonBrave

+0

Теория варьируется в зависимости от того, с какого браузера вы ее просматриваете, поскольку каждый браузер имеет другую реализацию сборщика мусора. Если вы хотите больше узнать о сборке мусора [прочитать это] (http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection) ... –

+0

Интересное чтение в нем, хотя оно и было не проливайте света на ситуации, о которых я спрашивал. Однако я соглашусь с вашим утверждением, что это не то, о чем я должен беспокоиться, и отметить ваш ответ как решение. – JonBrave

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