内存溢出:是一种程序运行时出现的错误;当程序运行时需要的内存超过了剩余的内存时,就会抛出内存溢出的错误。
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) //及时清理定时器 clearInterval(timer)
- 闭包
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)