最近在看内存泄漏的问题,比较疑惑,当我们需要多次访问同一个 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();
const定义的常量button作用域只在块里面,离开fn函数,button引用就被释放,所以上述代码不会导致button的dom对象泄漏。
不过如果button定义为var,则仍然会泄露,因为var的变量是全局变量,离开fn后不会被释放。