1) Нет. Браузер очищает все между загрузками страниц.
2) В текущем виде не будет утечки памяти, поскольку функция .each()
в jquery ничего не связывает, поэтому после завершения выполнения переданная анонимная функция становится недоступной, и поэтому среда оно закрыто (то есть закрытие в целом) также недоступно. Таким образом, механизм сборки мусора может очистить все, включая ссылку на objects
.
Однако, если вместо .each()
у вас было что-то безвредное, например $('div:eq(0)').bind()
(я пытаюсь подчеркнуть, что это не обязательно должна быть ссылка на большую переменную objects
, достаточно, чтобы это было даже одно несвязанный элемент), так как анонимная функция, отправленная на .bind()
, закрывает переменную objects
, она останется достижимой и, следовательно, не будет собирать мусор, что допускает утечки памяти.
Простой способ избежать этой проблемы - objects = null;
в конце выполнения функции.
Должен заметить, что я не знаком с механизмами сборки мусора JS, поэтому вполне возможно, что существуют разумные интеллектуальные оптимизации. Например, можно проверить, пытается ли анонимная функция получить доступ к любым закрытым переменным, и если нет, она может передать их сборщику мусора, что решит проблему.
Для дальнейшего чтения поищите ссылки на модель памяти javascript, в частности модель окружения и статическое связывание.