在使用Jquery.html()函数替换<;之后,如何从Javascript内存中删除函数;部门>;使用<;脚本>;包括?

在使用Jquery.html()函数替换<;之后,如何从Javascript内存中删除函数;部门>;使用<;脚本>;包括?,javascript,html,jquery,Javascript,Html,Jquery,下面是我遇到的一个问题的例子。我正在使用$(locator).html(data)替换ajax调用后的DIV。问题是DIV中还有一个SCRIPT标记,而该SCRIPT标记中的那些函数在该DIV的I.empty()之后仍保留在内存中 是否有方法自动/以编程方式删除/取消注册/取消定义脚本标记中的所有函数?我想我以为Jquery.empty()会这样做,但我想不会。我想我可以做一些手动操作,比如test1=undefined,但我不想对所有函数都显式地这样做 谢谢 编辑:我正在开发一个遗留产品,因此

下面是我遇到的一个问题的例子。我正在使用$(locator).html(data)替换ajax调用后的DIV。问题是DIV中还有一个SCRIPT标记,而该SCRIPT标记中的那些函数在该DIV的I.empty()之后仍保留在内存中

是否有方法自动/以编程方式删除/取消注册/取消定义脚本标记中的所有函数?我想我以为Jquery.empty()会这样做,但我想不会。我想我可以做一些手动操作,比如
test1=undefined
,但我不想对所有函数都显式地这样做

谢谢

编辑:我正在开发一个遗留产品,因此可以为newString变量加载几十个html文件和几十个函数。因此,我的目标不是更改其中任何一个,而是在替换div内容时解决.empty()和.html()时这个挥之不去的函数问题

编辑2:我不能只是“删除”函数,因为我并不总是知道函数是什么。我需要以编程的方式来做这件事。(似乎我一直被标记为重复的问题,但再一次,我不能删除我还不知道的内容)

功能更改(){
//此新闻字符串是从ajax调用返回的模拟html数据
let newString=“重新加载的页面”

”; log(“#emptyme HTML before empty():”) log($(“#emptyme”).html()); $(“#emptyme”).empty(); log(“#empty()后面的emptyme HTML:”) log($(“#emptyme”).html()); $(“#emptyme”).html(新闻字符串); if(测试类型1!=“未定义”){ $(“#error”).html(“仍然找到test1()!!”); log(“仍然找到test1()!!内存中的函数定义是:”); log(test1); } log(“完成更改功能”); }

文件

首页

函数test1(){ log(“这是test1函数”); } 负荷变化
JavaScrip有一个内部垃圾收集,您的代码不必像在C语言中那样破坏东西++

然而,在某些时候,我们会想“破坏一个功能”,因为它是昂贵的资源 因为js是自上而下运行的,所以如果您在程序中稍后的变量中调用该函数以释放这些资源,则可以覆盖该函数。或者在程序的逻辑中稍后再做

   var ExpensiveFunction =( function () {
 //..code
function getRidOfthis1(){ console.log("foo1"); }
function getRidOfthis2(){ console.log("foo2"); }
function getRidOfthis3(){ console.log("foo3"); }
function getRidOfthis4(){ console.log("foo4"); }

//initiate an internal reference to them 
ExpensiveFunction.getRidOfthis1 = getRidOfthis1;
ExpensiveFunction.getRidOfthis2 = getRidOfthis2;
ExpensiveFunction.getRidOfthis3 = getRidOfthis3;
ExpensiveFunction.getRidOfthis4 = getRidOfthis4;

}  );

//Functions available outside of the nesting 
ExpensiveFunction()
ExpensiveFunction.getRidOfthis1();
ExpensiveFunction.getRidOfthis2();

// overidding it 
ExpensiveFunction =0

这回答了你的问题吗?“我可以手动执行一些操作,比如test1=undefined,但我不想对所有函数都显式执行这些操作。”-您必须…更改结构DOM会立即影响页面,但JS一旦执行,将保留在内存中,除非不再引用。您想要做的事情无法完成,因为一旦加载,函数定义就不再与其原始脚本绑定。更改它们的唯一方法是通过JS修改它们的定义。@ikiK谢谢,但是如何获得该特定标记中所有函数/变量的列表/数组?当我清空并用新内容填充div时,我真的不知道它们都是什么。(也要感谢@tucuxi)到目前为止,我还没有这样做,但请检查这个主题:,或者做一些进一步的挖掘。这并不能回答“为什么我的旧定义仍然存在,如何在不逐个覆盖的情况下删除它们”的问题是的,但关键是您可以将所有嵌套的函数定义放在一个主函数下,只需销毁他想要销毁的函数组的存放容器,并对其进行调整,以反映这样的情况:编写时,您的函数无法从外部访问
ExpensiveFunction
。您的方法的一个陷阱是,如果它们可以从外部访问(您可以假设OP就是这种情况),将
ExpensiveFunction
设置为不同的值不会影响对这些函数的直接引用。这里有一个要点,说明了如何从嵌套范围之外初始化这些函数,并将它们初始化为对象名,就像构造函数一样