Можно ли уничтожить загруженный JavaScript, включая функцию и локальную переменную? - PullRequest
1 голос
/ 22 октября 2009

Я знаю. Можно динамически загружать JavaScript и файл таблицы стилей в заголовок документа. С другой стороны, можно удалить скрипт и тег таблицы стилей из заголовка документа. Однако загруженный JavaScript все еще находится в памяти.

Можно ли уничтожить загруженный JavaScript из памяти веб-браузера? Я думаю. Это должно быть что-то вроде следующего псевдокода.

// Scan all variables in loaded JavaScript file.
var loadedVariable = getLoadedVariable(JavaScriptFile);

for(var variable in loadedVariable)
{
    variable = null;
}

// Do same thing with function.

Можно ли создать какой-нибудь JavaScript для этого?

Спасибо

PS. Теперь вы можете использовать xLazyLoader и jQuery для динамической загрузки контента.

Ответы [ 2 ]

3 голосов
/ 22 октября 2009

Если загруженный скрипт назначен свойству window, например, с шаблоном модуля, например так:

window.NiftyThing = (function() {
    function doSomething() { ... }
    return {
        doSomething: doSomething
    };
})();

или

window.NiftyThing = {
    doSomething: function() { ... }
};

или

NiftyThing = {
    doSomething: function() { ... }
};

Затем вы можете удалить свойство, которое ссылается на него:

delete window.NiftyThing;

... который удаляет хотя бы одну основную ссылку на него; если есть другие ссылки на него, он может не очиститься.

Если использовалось ключевое слово var:

var NiftyThing = {
    doSomething: function() { ... }
};

... тогда это не свойство, и вы не можете использовать delete, поэтому установка undefined или null прервет ссылку:

NiftyThing = undefined;

Вы можете хеджировать свои ставки:

NiftyThing = undefined;
try { delete NiftyThing; } catch (e) { }

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

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

1 голос
/ 22 октября 2009

Может быть возможно удалить загруженный файл Javascript, но это не отменяет действия кода, т. Е. Функции, которые были в коде, все еще определены.

Вы можете удалить определение функции, просто заменив его чем-то другим:

myFunction = null;

Это не удаляет идентификатор, но это больше не функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...