2015-02-26 2 views
0

Я использую featherlightlibrary, чтобы показать лайтбоксы. Я использую кофе и так в начале моего файла JS У меня естьУтечки памяти в Javascript

myFeatherBox = void 0; 

Позже, когда я хочу, чтобы использовать его я делать такие вещи, как это:

if (myFeatherBox != null) { 
    myFeatherBox.close(); 
} 
myFeatherBox = $.featherlight("<div>whatever</div>"); 

я проверить нуль в случае фейербокс уже открыт, и в этом случае я его закрываю. Чтобы не оставлять массы этих вещей в памяти, я, по сути, создаю новую коробку в старой переменной.

Так что мне интересно, просто ли это сирота в старой коробке в памяти (и если да, то как ее очистить) и является ли это способом делать что-то.

+1

«ли это просто сирота старого окна в памяти» - да, это то, что он делает. «как его очистить» - не нужно волноваться, осиротевшие объекты будут автоматически удаляться сборкой мусора. – JimmyB

+0

«ли это способ сделать что-то» - Да, так оно и делается. На самом деле, нет явного способа удалить объект из памяти. Когда он больше не будет указан, gc позаботится об этом. В gc'ed языках утечки памяти появляются только при сохранении ссылок на объекты, хотя они больше не будут использоваться. Это происходит, например, когда вы продолжаете добавлять новые объекты в растущий массив/список, не удаляя их, даже если вы можете использовать только последние три из них. – JimmyB

+0

BTW, не нужно сохранять ссылку на текущий свет. Вы можете вызвать '$ .featherlight.current()' в любой точке. Более того, '$ .featherlight.close()' закроет текущий featherlight, если он есть. –

ответ

0

Если больше нет ссылки на старую коробку для перьев, она будет иметь право на сбор мусора (GC).

Вы не можете заставить сборку мусора.

Вы можете использовать инструмент, например, инструменты разработчика Chrome, чтобы узнать, что находится в памяти.