当jQuery .remove()用于删除脚本标记时,它是否清除了加载的javascript?

gor*_*dyr 19 javascript jquery

正如标题所说,如果我使用以下方法从DOM中删除脚本标记:

$('#scriptid').remove();
Run Code Online (Sandbox Code Playgroud)

javascript本身是保留在内存中还是已清除?

或者......我是否完全误解了浏览器对待javascript的方式?这很可能.

对于那些对我的询问有兴趣的人,请看下面:

我正在将一些常见的javascript交互从静态脚本文件转移到PHP中动态生成的交互.当用户需要时按需加载.

这样做的原因是为了移动逻辑服务器端并运行从服务器clientide返回的小脚本.客户端不是拥有包含大量逻辑的大型脚本.

这与facebook的做法类似......

Facebook谈论前端javascript

如果我们举一个简单的对话框.而不是在javascript中生成html,将其附加到dom,然后使用jqueryUI的对话框小部件加载它,我现在正在执行以下操作.

  • 对dialog.php发出Ajax请求
  • 服务器生成特定于此对话框的html和javascript,然后将它们编码为JSON
  • JSON返回给客户端.
  • HTML <body>一旦被渲染,就会附加到,然后javascript也会附加到DOM中.

插入后会自动执行javascript,并打开动态对话框.

这样做大大减少了我页面上javasript的数量,但是我担心清理插入的javascript.

显然,一旦对话框关闭,它将使用jQuery从DOM中删除:

$('#dialog').remove();

javascript附加了一个ID,我也通过相同的方法从DOM中删除它.

但是,如上所述,使用jQuery的.remove()实际上是从内存中清除javascript还是简单地<script>从DOM中删除元素?

如果是这样,有什么方法可以清理它吗?

Nie*_*sol 19

加载脚本后,它定义的对象和函数将保存在内存中.删除脚本元素不会删除它定义的对象.这与CSS文件形成对比,其中删除元素会删除它定义的样式.那是因为新款式很容易回流.你能想象弄清楚脚本标签创建的内容以及如何删除它有多难吗?

编辑:但是,如果您有一个定义的文件myFunction,那么您添加另一个重新定义myFunction为其他内容的脚本,将保留新值.script如果你想保持DOM干净,你可以删除旧标签,但这一切都是删除它.

EDIT2:我能想到的"清理"功能的唯一真正方法是拥有一个基本上调用delete window.myFunction其他脚本文件可能定义的每个可能对象和函数的JS文件.出于显而易见的原因,这是一个非常糟糕的主意.