# 内存泄漏
# 内存泄漏 定义
- 未能释放已经不再使用的内存
# 垃圾回收机制
标记清除--标记所有变量,然后去掉已经被引用的变量的标记,清除有标记的变量。
引用计数--引用表保存了所有资源的引用次数,如果引用次数为0,则表示可以内存回收。
# 常见内存泄漏情况
- 意外的全局变量
function fn() {
a = 123;
}
function fn() {
this.age = 12;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
- 未结束的定时器
setInterval(function() {
// ...
}, 100)
1
2
3
2
3
- 闭包
function bindEvent() {
var obj = document.createElement('XXX');
var unused = function () {
console.log(obj, '闭包内引用obj obj不会被释放');
};
obj = null; // 解决方法
}
1
2
3
4
5
6
7
2
3
4
5
6
7
- addEventListener 事件监听, 在不监听的情况使用 removeEventListener 取消。