垃圾回收问题

最近在看内存泄漏的问题,比较疑惑,当我们需要多次访问同一个 DOM 元素时,一个好的做法是将 DOM 元素用一个变量存储在内存中,因为访问 DOM 的效率一般比较低,应该避免频繁地反问 DOM 元素。所以我们会这样写:

const button = document.getElementById('button');
当删除这个按钮时:

document.body.removeChild(document.getElementById('button'));
虽然这样看起来删除了这个 DOM 元素,但这个 DOM 元素仍然被 button 这个变量引用,所以在内存上,这个 DOM 元素是没法被回收的。所以在使用结束后,还需要将 button 设成 null。


以上问题,如果不是在window下进行,而是使用一个函数将这两行代码包裹起来,运行还会存在内存泄漏的问题么?

function fn(){
    const button = document.getElementById('button');
    document.body.removeChild(document.getElementById('button'));
}

fn();
阅读 1.2k
1 个回答

const定义的常量button作用域只在块里面,离开fn函数,button引用就被释放,所以上述代码不会导致button的dom对象泄漏。

不过如果button定义为var,则仍然会泄露,因为var的变量是全局变量,离开fn后不会被释放。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题