Каждая уникальная запись в глобальном контексте выполнения Javascript может представлять только один объект или переменную. Повторная загрузка одной и той же функции в глобальный контекст заменяет код функции снова и снова.
Вы должны управлять сценариями, загружаемыми с отложенной загрузкой, таким образом, чтобы они представляли одну и ту же запись в вашем глобальном контексте (или в используемой вами среде)
Посмотрите на следующие примеры js-кодов, которые считаются лениво загруженными в два разных времени
//script 1
var dynFun = function() {
console.log('Loaded early');
{
//script 2
var dynFun = function() {
console.log('Loaded late');
{
Теперь, если вы загрузите скрипт и выполните dynFun()
, он выйдет из системы "Loaded early"
. Теперь, в этот момент, если вы загрузите второй скрипт и снова выполните dynFun()
, он выйдет из системы "Loaded late"
.
Однако, если каждая из этих функций запускает автоматические процессы, такие как setTimeout
, они будут продолжать функционировать, пока страница не будет закрыта.
В таких случаях ваши динамические сценарии должны сначала выполнить некоторую очистку.
var timeTracker; //This is global
var dynFun = function() {
if (timeTracker)
clearTimeout(timeTracker)
timeTracker = setTimeout(someFn, 1000)
{
Помните - вы не можете решить, как освободить память на таких языках, как JS. Вы можете обмануть только процесс очистки, манипулируя ссылками на объекты.