Javascript 从DOM和内存中动态加载和删除JS代码
基本上,我想把这样的JS文件动态加载到页面中Javascript 从DOM和内存中动态加载和删除JS代码,javascript,Javascript,基本上,我想把这样的JS文件动态加载到页面中 globalVar = "some variable"; alert(globalVar); 然后我想删除它,我可以很容易地从DOM中删除脚本,但我会将globalVar保留在内存中 是否有JS库可以帮助我加载脚本,然后卸载脚本,卸载脚本声明的所有变量、类和函数?或者有一些技巧可以做到这一点吗?在JavaScript中,当您声明一个全局变量时,它实际上是“全局”对象(通常是DOMWindow或“window”)的一个属性,因此您只需通过变量名删除该
globalVar = "some variable";
alert(globalVar);
然后我想删除它,我可以很容易地从DOM中删除脚本,但我会将globalVar
保留在内存中
是否有JS库可以帮助我加载脚本,然后卸载脚本,卸载脚本声明的所有变量、类和函数?或者有一些技巧可以做到这一点吗?在JavaScript中,当您声明一个全局变量时,它实际上是“全局”对象(通常是DOMWindow或“window”)的一个属性,因此您只需通过变量名删除该属性即可删除全局引用。例如:
var foo = 123;
alert(foo); // Alerts "123"
alert(window.foo); // Alerts "123"
delete window.foo;
foo; // ReferenceError: foo is not defined.
因此,如果您可以跟踪您使用的全局变量(应该是非常非常少的,就像一个),您可以将其作为属性从“窗口”或“全局”根级别对象中删除
更新
您可以将此想法扩展到一般情况,如下所示。在脚本开始时,枚举全局对象的属性并将其存储在引用对象中。然后,当您想要标识新添加的全局属性时,再次枚举全局属性,并仅存储引用对象中不存在的属性(这意味着它们是自上次选中后新添加的)。然后简单地删除这些附加属性。这是可怕的JavaScript。如果要导入的JS在删除全局对象时没有对全局对象做任何值得保留的事情(例如更改DOM),那么它就不应该向全局对象写入新变量 希望您能够控制导入的JS,并且应该将代码封装在一个自执行函数中,并确保所有变量声明都以
var
开头。这意味着您没有用自己的变量污染全局对象,您可以在脚本中执行任何需要的操作。您上面的代码将变成:
function() {
var globalVar = "some variable";
alert(globalVar);
}();
这将确保没有新变量写入全局对象,并且您仍然可以访问它们来更改它们(这可能是您需要做的)
如果你想要更多的信息,你能不能对这个重要的脚本的实际功能做一些说明?。。正如我所说。。我动态加载JS,我只是不知道它将声明什么variebles、classed、函数……是否有一个“准备就绪”的代码或框架来实现这一点?“我和哈斯克尔一样懒”:)我认为你在某种程度上是对的。。现在,我将您的“解决方案”标记为一个答案……在您编写它时,它可能是正确的,但在现代SPA中,异步模块加载和卸载是可取的。假设您有多个网页,其中需要在特定元素上实例化jquery插件。当您导航到新页面时,上一页面的代码和事件侦听器仍然存在。感谢necro帖子。为什么你要在SPA中卸载一个模块,却又想保持模块的效果?