是否有可能销毁加载的JavaScript,包括函数&局部变量?

时间:2009-10-22 08:57:45

标签: javascript ajax

我知道。可以将JavaScript和样式表文件动态加载到文档的标题中。另一方面,可以从文档的标题中删除脚本和样式表标签。但是,加载的JavaScript仍然存在于内存中。

是否可以从Web浏览器内存中销毁加载的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 个答案:

答案 0 :(得分:3)

如果加载的脚本被分配给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,因此设置为undefinednull会破坏参考:

NiftyThing = undefined;

你可以对冲你的赌注:

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

在所有情况下,由JavaScript实现决定对加载的脚本没有未完成的外部引用并进行清理,但至少你给了它机会。

如果像Guffa所说的那样,加载的脚本不使用模块模式,那么您需要将这些规则应用于其所有符号。这也是模块模式为Good Thing(tm)的另一个原因。 ; - )

答案 1 :(得分:1)

有可能删除已加载的Javascript文件,但这不会撤消代码所做的操作,即代码中的函数仍然被定义。

您只需将其替换为其他内容即可删除函数定义:

myFunction = null;

这不会删除标识符,但它不再是一个函数。