javascript - 在 JavaScript 中,在函数内部创建的未附加到 DOM 树的节点是否会导致空间困惑?

标签 javascript dom memory-management scope nodes

我习惯在顶部 block 的作用域中声明每个变量,以提高代码的可读性。我怀疑函数作用域内未添加到文档正文中的节点会导致空间困惑并降低性能。他们会怎样?一般来说,在函数作用域内创建的变量会发生什么情况?函数执行后它们会被销毁吗?我需要担心内存的释放吗?在作用域的最顶层 block 声明变量是一个好习惯,还是只在需要它们或某些条件成立时才在现场声明它们更好?这有助于提高运行时性能吗?

假设一个像这样的函数:

function myfunc() {
    var someNode = document.createElement('div');
    if(someCondition) { // add the node only if some condition is true
        document.body.appendChild(someNode);
    }

V.S 像这样的函数:

function myfunc() {
    if(someCondition) { // create and add the node only if some condition is true
        var someNode = document.createElement('div');
        document.body.appendChild(someNode);
    }
}

最佳答案

Javascript 通过垃圾收集实现自动内存管理。如果作用域内没有变量引用某条数据,则应回收内存。因此,在您的示例中,当函数退出时(或不久之后,下一次垃圾回收发生时),未使用的 DIV 将被销毁。

但是,最好避免创建不需要的对象。这需要时间,并且在函数运行时会消耗内存。对于小型、简单的对象(即使用文字 {...} 语法创建的对象)和数组来说,这还不错,但节点是非常复杂的对象。

关于javascript - 在 JavaScript 中,在函数内部创建的未附加到 DOM 树的节点是否会导致空间困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17573971/

相关文章:

javascript - 检测字符串是否包含表格

javascript - Javascript 中两个字符串之间的网络效率差异

c++ - 有没有办法将一 block 分配的内存标记为只读?

c - 看来基于堆栈的变量在 C 函数之后没有被释放

c - 如何分配动态静态多维数组

javascript - 循环播放一个又一个声音

Javascript 搜索栏仅搜索标题

javascript run 函数在迭代内有延迟

javascript - 无法将解析后的字符串附加到 dom

javascript - 带有节点 appendChild() html 的动画