JavaScript之内存泄漏和内存溢出

内存溢出:是一种程序运行时出现的错误;当程序运行时需要的内存超过了剩余的内存时,就会抛出内存溢出的错误。

var obj = {}
for(let i = 0;i < 1000000;i++){
    obj[i] = new Array(1000000)
}

个人理解:内存溢出是最终结果,即使没有编写内存泄露的代码也有可能造成内存溢出

内存泄漏:占用的内存没有及时释放,内存泄漏积累多了就容易导致内存溢出。

常见的内存泄漏

  • 意外的全局变量
function fn(){
    a = 10
    console.log(a)    
}
fn()

for(let i = 0;i < 10;i++){
  window[i] = i
}
  • 没有及时清理的定时器
var timer = setInterval(() => {
  console.log('----')
}, 1000)
timer = null //没有及时清理的定时器
  • 闭包
function fn1() {
  var arr = new Array[100000];
  function fn2() {
    console.log(arr.length)
  }
  return fn2;
}
var f = fn1();
f();

f = null // 让内部函数成为垃圾对象,释放闭包
  • 事件绑定
function fn() {
    var zjy = document.getElementById('zjy'); 
    zjy.onclick = function () {
        alert(zjy.innerHTML);
    };

    zjy = null;       //解除引用,等待垃圾回收
    alert(zjy);       //null,说明已经不存在了
}
fn();  
  • 事件监听
function fn(){
    console.log('zjy')
}
let zjy = document.getElementById('zjy'); 
zjy.addEventListener('click',fn)
zjy.removeEventListener(fn)

  

posted @ 2020-07-06 21:02  671_MrSix  阅读(748)  评论(0编辑  收藏  举报