基本上我想将这样的JS文件动态加载到页面中
globalVar = "some variable";
alert(globalVar);
然后我想删除它,我可以轻松地从DOM中删除脚本,但我会将globalVar
保留在内存中...
是否有一个JS库可以帮助我加载脚本然后卸载它并卸载该脚本声明的所有变量,类和函数?或者有一些技巧可以做到吗?
答案 0 :(得分:3)
在JavaScript中,当您声明一个全局变量时,它实际上是“全局”对象(通常是DOMWindow或“窗口”)的属性,因此您只需通过变量名称删除该属性即可删除全球参考。例如:
var foo = 123;
alert(foo); // Alerts "123"
alert(window.foo); // Alerts "123"
delete window.foo;
foo; // ReferenceError: foo is not defined.
因此,如果您可以跟踪您使用的全局变量(应该非常非常少,就像一个),您只需将其作为属性从“窗口”或“全局”根级对象中删除。 / p>
<强>更新强>
您可以将此想法扩展为通常如下工作。在脚本的开头,枚举全局对象的属性并将它们存储在引用对象中。然后,当您想要识别新添加的全局变量时,再次枚举全局属性并仅存储参考对象中不存在的属性(这意味着它们是您上次检查后新添加的)。然后只需删除这些附加属性。
答案 1 :(得分:0)
这是一个可怕的JavaScript。如果你要导入的JS对删除它时不值得保留的全局对象做任何事情(例如更改DOM),那么它根本不应该将新变量写入全局对象。 / p>
希望您可以控制导入的JS,并且应该将代码封装在自执行函数中,并确保所有变量声明都以var
开头。这意味着您不会使用自己的变量污染全局对象,并且您可以在脚本中执行任何操作。您上面的代码将成为:
function() {
var globalVar = "some variable";
alert(globalVar);
}();
这将确保没有新变量写入全局对象,并且您仍然可以访问它们来更改它们(这可能是您需要做的)。
如果您想了解更多信息,您是否可以更清楚地了解重要脚本的实际用途?