javascript - 删除 JavaScript 中的 HTML 元素以避免内存泄漏

标签 javascript html memory-management

我最近开始接触javascript,我的html编码能力有些欠缺。话虽如此,我遇到了一些可以在 javascript 中找到的有趣的事情。由于 javascript 和 html 的紧密使用,我担心我已经造成了内存泄漏。

在这种情况下,我想创建自己的自定义 javascript 警报样式/确认框。我最终通过 javascript 有效地创建了一个 html 覆盖。做出选择后,我删除了该叠加层。

    var output;
    var createPromotionBox = function () {
        var choice = '';
        var b = document.getElementById('button-container');
        var box = document.createElement('div');
        box.setAttribute('id', 'alert-box');
        box.setAttribute('class','alert');
        b.appendChild(box);
        var text = document.createElement('div');
        text.setAttribute('class','alert-content');
        text.setAttribute('id', 'alert-text');
        text.innerHTML = 'Promote your pawn!<br>';
        box.appendChild(text);

        var arr = ['Q', 'N', 'R', 'B'];
        for(var i in arr) (function(i){
            var btn = document.createElement('button');
            btn.setAttribute('class','promotion-button');
            btn.setAttribute('id',arr[i]+'btn');
            btn.innerHTML = arr[i];
            btn.onclick = function () {
                output = arr[i];
                deletePromotionBox();
            };
            text.appendChild(btn);
        })(i);
    };

    var deletePromotionBox = function () {
        var arr = ['Q', 'N', 'R', 'B'];
        for(var i in arr) {
            removeElement(arr[i]+'btn');
        }
        removeElement('alert-text');
        removeElement('alert-box');
    };

    var removeElement = function (elementId) {
        var e = document.getElementById(elementId);
        e.parentNode.removeChild(e);
    };
    document.getElementById('btn').onclick = createPromotionBox;
    <html>
    <body > Amazing code works! <br><br>
    <div class="button-box" id="button-container" style="width: 600px">
    <button id="btn">Click Me!</button>
    </div>
    </body>
    </html>

我在创建bboxtextbtn 时是否有泄漏?我删除了 html 元素,但变量引用现在已从它们的元素中孤立出来。

另外我想我在某处读到我不应该使用 remove()。还有其他方法吗?

最佳答案

这不应造成内存泄漏。

如果您删除元素并且对超出范围的引用,那么垃圾收集器应使用标记和清除算法清理它们。

您始终可以使用内存分析工具检查 Chrome 开发工具,请参阅 DevTools memory leak problems有关这方面的更多信息

关于javascript - 删除 JavaScript 中的 HTML 元素以避免内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49147182/

相关文章:

c - 释放未知大小的 malloc

javascript - d3.js 时间轴上的垂直线

javascript - 相对于 jQuery/Js 中的内部数据之一对数组进行排序

html - 不透明度属性在 css 中没有给出预期的结果

javascript - 是否可以将 Template7 代码放在单独的文件而不是 html 中

linux - 结构 "struct page"存储在 linux 内核中的什么位置?

javascript - Thymeleaf:使用 Ajax 刷新值

javascript - 错误: cannot read property 'get' of undefined - HTTPS in node.js

javascript - 使用文本框计算数字

ios - 在 ARC 中强 vs 保留