是否有可能销毁加载的JavaScript,包括函数&;局部变量?
我知道。可以将JavaScript和样式表文件动态加载到文档头中。另一方面,可以从文档头中删除脚本和样式表标记。然而,加载的JavaScript仍然存在于内存中 是否可以从web浏览器内存中销毁加载的JavaScript?我想。它应该类似于下面的伪代码是否有可能销毁加载的JavaScript,包括函数&;局部变量?,javascript,ajax,Javascript,Ajax,我知道。可以将JavaScript和样式表文件动态加载到文档头中。另一方面,可以从文档头中删除脚本和样式表标记。然而,加载的JavaScript仍然存在于内存中 是否可以从web浏览器内存中销毁加载的JavaScript?我想。它应该类似于下面的伪代码 // Scan all variables in loaded JavaScript file. var loadedVariable = getLoadedVariable(JavaScriptFile); for(var variable
// Scan all variables in loaded JavaScript file.
var loadedVariable = getLoadedVariable(JavaScriptFile);
for(var variable in loadedVariable)
{
variable = null;
}
// Do same thing with function.
有没有可能创建一些JavaScript来完成这样的操作
谢谢,
现在,您可以使用和jQuery动态加载内容。可以删除已加载的Javascript文件,但这不会撤消代码所做的操作,即代码中的函数仍在定义中 只需将函数定义替换为其他定义,即可将其删除:
myFunction = null;
这不会删除标识符,但它不再是一个函数。可以删除已加载的Javascript文件,但这不会撤消代码所做的操作,即代码中的函数仍在定义中 只需将函数定义替换为其他定义,即可将其删除:
myFunction = null;
这不会删除标识符,但它不再是一个函数。如果加载的脚本被分配给
窗口
属性,例如使用如下模块模式:
window.NiftyThing = (function() {
function doSomething() { ... }
return {
doSomething: doSomething
};
})();
或
或
然后可以删除引用它的属性:
delete window.NiftyThing;
…至少删除了对它的一个主要引用;如果有其他引用,则可能无法清理
如果使用了var
关键字:
var NiftyThing = {
doSomething: function() { ... }
};
…那么它不是一个属性,您不能使用delete
,因此设置为undefined
或null
将中断引用:
NiftyThing = undefined;
您可以对冲您的赌注:
NiftyThing = undefined;
try { delete NiftyThing; } catch (e) { }
在所有情况下,由JavaScript实现来确定加载的脚本没有未完成的外部引用并进行清理,但至少您给了它机会
如Guffa所说,如果加载的脚本没有使用模块模式,那么您需要将这些规则应用于它的所有符号。这也是模块模式是件好事(tm)的另一个原因 如果加载的脚本被分配给
窗口
属性,例如,模块模式如下:
window.NiftyThing = (function() {
function doSomething() { ... }
return {
doSomething: doSomething
};
})();
或
或
然后可以删除引用它的属性:
delete window.NiftyThing;
…至少删除了对它的一个主要引用;如果有其他引用,则可能无法清理
如果使用了var
关键字:
var NiftyThing = {
doSomething: function() { ... }
};
…那么它不是一个属性,您不能使用delete
,因此设置为undefined
或null
将中断引用:
NiftyThing = undefined;
您可以对冲您的赌注:
NiftyThing = undefined;
try { delete NiftyThing; } catch (e) { }
在所有情况下,由JavaScript实现来确定加载的脚本没有未完成的外部引用并进行清理,但至少您给了它机会
如Guffa所说,如果加载的脚本没有使用模块模式,那么您需要将这些规则应用于它的所有符号。这也是模块模式是件好事(tm)的另一个原因 为什么您认为需要这样做?因为我想创建一些没有任何iframe的web应用程序。每个页面都将通过Ajax加载。此外,JavaScript和样式表将根据页面需求加载。之后,引擎将销毁未使用的JavaScript和样式表,以减少函数、变量、JavaScript规则和样式表的重复名称。您认为为什么需要这样做?因为我想创建一些没有iframe的web应用程序。每个页面都将通过Ajax加载。此外,JavaScript和样式表将根据页面需求加载。之后,引擎将销毁未使用的JavaScript和样式表,以减少函数、变量、JavaScript规则和样式表的重复名称。我可以通过设置为未定义值来删除它吗?我可以通过设置为未定义值来删除它吗?因此,我需要使用正则表达式来查找每个可能的变量和函数模式。对吧?如果你在不知道你要卸载的是什么的情况下尝试这么做,我想你还有很多工作要做。你甚至不知道它会起作用;脚本可以设置事件处理程序,它将保留引用。你最终可能只是破坏它(事件处理程序试图通过你删除的符号调用函数),而不是删除它。因此,我需要使用正则表达式来查找变量和函数的每种可能模式。对吧?如果你在不知道你要卸载的是什么的情况下尝试这么做,我想你还有很多工作要做。你甚至不知道它会起作用;脚本可以设置事件处理程序,它将保留引用。您可能最终只是中断它(事件处理程序试图通过已删除的符号调用函数),而不是删除它。