gpt4 book ai didi

javascript - 替换文档正文时是否收集了内联 javascript 垃圾?

转载 作者:太空狗 更新时间:2023-10-29 13:51:53 28 4
gpt4 key购买 nike

假设我有以下用 HTML 编写的网页(仅正文部分):

<body>
<p>
...
</p>

<script>
function fn() {
// do stuff
}
</script>
</body>

现在,如果我将 JavaScript 中 document.bodyinnerHTML 替换为一个 div,那么正文部分将变为:

<body>
<div>
...
</div>
</body>

...如果在代码的其余部分(任何上下文)中不存在对它的任何引用,fn 对象有资格进行垃圾回收吗?

最佳答案

如果没有从任何上下文中对它进行其他引用,它将受到垃圾收集的影响。但是,有一个小引用保留了该函数,即全局窗口对象。这是因为函数(和显示的整个脚本部分)是全局范围的。此引用将仍然存在,即使整个 document.body 的 innerHTML 被替换。

只有几种方法可以从全局对象中释放您的确切示例中显示的对象并使其有资格进行收集。删除全局对象的属性不是一个选项,因为它被声明为函数而不是属性。

  • 用其他东西覆盖全局对象的属性。 window.fn = [][0];(未定义的快捷方式)
  • 离开页面,使全局对象符合垃圾回收条件。

关于垃圾收集的快速说明,它在浏览器认为有必要时发生,并且不会在对象没有引用后立即发生(或者至少,通常不会 - 这可能会不时发生时间)。

关于javascript - 替换文档正文时是否收集了内联 javascript 垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31592655/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com