我知道。可以将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来动态加载内容。
答案 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
,因此设置为undefined
或null
会破坏参考:
NiftyThing = undefined;
你可以对冲你的赌注:
NiftyThing = undefined;
try { delete NiftyThing; } catch (e) { }
在所有情况下,由JavaScript实现决定对加载的脚本没有未完成的外部引用并进行清理,但至少你给了它机会。
如果像Guffa所说的那样,加载的脚本不使用模块模式,那么您需要将这些规则应用于其所有符号。这也是模块模式为Good Thing(tm)的另一个原因。 ; - )
答案 1 :(得分:1)
有可能删除已加载的Javascript文件,但这不会撤消代码所做的操作,即代码中的函数仍然被定义。
您只需将其替换为其他内容即可删除函数定义:
myFunction = null;
这不会删除标识符,但它不再是一个函数。