GC会清除其侦听器中引用的元素变量吗?

时间:2016-01-07 12:48:35

标签: javascript garbage-collection

如果在代码中有一些引用,垃圾收集器将不会清除从DOM元素中删除的内容。但是,如果此引用内部附加到此元素侦听器,该怎么办?

<span id="element">aga</span>
<script>
    function attach() {
        var element = document.getElementById("element");
        element.addEventListener("click", function() {
            //1) if element isn't used in this function
            console.log('aga');
            //2) if element is used in this function
            console.log(element);
        });
    }
    attach();

    document.body.innerHTML = '';
</script>       

1 个答案:

答案 0 :(得分:0)

如果浏览器“正确”实现了垃圾收集(特别是如果它使用Mark-and-sweep algorithm),则应该收集该DOM元素,因为它现在无法从全局范围访问。

当GC实现仅使用引用计数算法时,您的问题可能与导致潜在内存泄漏的循环引用有关。有关详细信息,请参阅上面的链接。

您可能也对这篇文章感兴趣:What is JavaScript garbage collection?