从DOM和内存动态加载和删除JS代码

时间:2011-03-29 09:26:46

标签: javascript

基本上我想将这样的JS文件动态加载到页面中

globalVar = "some variable";
alert(globalVar);

然后我想删除它,我可以轻松地从DOM中删除脚本,但我会将globalVar保留在内存中...

是否有一个JS库可以帮助我加载脚本然后卸载它并卸载该脚本声明的所有变量,类和函数?或者有一些技巧可以做到吗?

2 个答案:

答案 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);
}();

这将确保没有新变量写入全局对象,并且您仍然可以访问它们来更改它们(这可能是您需要做的)。

如果您想了解更多信息,您是否可以更清楚地了解重要脚本的实际用途?