内存溢出:
当程序运行需要的内存超过了剩余的内存时, 就出抛出内存溢出的错误
内存泄漏:
1. 占用的内存没有及时释放
2. 内存泄露积累多了就容易导致内存溢出
3. 意外的全局变量:
JavaScript 处理未定义变量的方式比较宽松:未定义的变量会在全局对象创建一个新变量。在浏览器中,全局对象是 window 。
function fun(arg) {
a=1
}
//实际上是
function fun(arg) {
window.a=1
}
另一种意外的全局变量可能由 this 创建
function fun() {
this.a = "aaa";
}
// fun 调用自己,this 指向了全局对象(window)
fun();
3. 没有及时清理的计时器或回调函数
setInterval(function(){
console.log("...")// 启动定时器不清理
},100)
var time=setInterval(function(){
console.log("...")
},100)
clearInterval(time)//及时清理
4.闭包没有释放
function fn1() {
var arr = new Array(999999);
function fn2() {
console.log(arr.length);
}
return fn2;
}
var f = fn1(); //因函数fn2被f引用,所以fn2不会被回收
f();
f = null;//让内部函数成为垃圾对象,回收闭包,及时释放