# 内存泄漏

# 内存泄漏 定义

  • 未能释放已经不再使用的内存

# 垃圾回收机制

  • 标记清除--标记所有变量,然后去掉已经被引用的变量的标记,清除有标记的变量。

  • 引用计数--引用表保存了所有资源的引用次数,如果引用次数为0,则表示可以内存回收。

# 常见内存泄漏情况

  • 意外的全局变量
function fn() {
  a = 123;
}

function fn() {
  this.age = 12;
}
1
2
3
4
5
6
7
  • 未结束的定时器
setInterval(function() {
  // ...
}, 100)
1
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
  • addEventListener 事件监听, 在不监听的情况使用 removeEventListener 取消。