说说对内存泄漏的理解及触发场景
# 是什么
内存泄漏:程序未能释放不再使用的内存(变量占用空间)
- 影响: 可用内存空间越来越少,性能受影响,甚至进程崩溃
# js垃圾回收机制
- 老生代算法
- 标记清除法
- 引用计数法
- 新生代算法
- from空间和to空间来回复制
const arr = [1, 2, 3, 4];
console.log('hello world');
// 定义了arr并未使用
# 常见场景
- 意外的全局变量
function fn(){
this.name = 'fangdown'
}
fn()
// window中多了一个name属性,一直占用内存
- 定时器
// 假设ele已经被删除了, 下面的代码变的无效,但会一直执行
setInterval(()=>{
let ele = document.getElementById('fang')
if(ele){
ele.innerHTML = 'something'
}
},100)
- 闭包
function fn(){
let name = 'fang'
return function(){
console.log(name)
}
}
fn()() // name还会被存储在内存中,不会释放
- dom引用
const ele = document.getElementById('fang')
document.removeChild(ele)
// ele仍然有对fang的引用
- 事件监听
const ele = document.getElementById('fang')
ele.addEventListener('click', fn)
ele.removeEventListener('click', fn) // 不用的时候要清理
上次更新: 2021/12/19, 18:05:42