js中的内存溢出与内存泄漏
闭包的缺点及解决方法
1.缺点:函数执行完毕后,函数内的局部变量没有释放,占用内存时间长,容易造成内存泄漏。
2.解决方法:及时释放(让内部函数成为垃圾对象–》回收闭包),不使用闭包。
内存溢出:程序运行出现的一种错误,当程序运行超过需要的内存超过了剩余的内存,就出现内存溢出的错误。
内存泄漏:占用的内存没有及时释放,内存泄漏太多就容易导致内存溢出
常见的内存泄漏有:意外的全局变量(定义变量忘记写var),没有及时清理的计时器或回调函数,闭包。
//两个例题
var name = "Window";
var Object = {
name:'My OBJ',
getName:function(){
return function(){
return this.name
};
}
};
alert(Object .getName()());/Window,现在的this指向window,因为是window调用的最终方法,没有闭包,内部函数没有引用外部函数变量
var name2 = "Window";
var Object = {
name:'My OBJ',
getName:function(){
var that = this;
return function(){
return that.name2;
};
}
};
alert(Object .getName()());/My OBJ,现在的that指向Object,有闭包,内部函数引用了外部函数变量
function fun(n,o){
console.log(o);
return {
fun:function(m){
return fun(m,n);
}
};
}
var a=fun(0);//返回函数对象undefined
a.fun(1);//0 ,返回对象但是没有接收,有闭包但马上又消失了
a.fun(2);//0
a.fun(3);// 0
var b=fun(0).fun(1).fun(2).fun(3);//undefined 0 1 2(一直有接收,所以一直有闭包)
var c=fun(0).fun(1);//undefined 0,此时n为1,
c.fun(2);//1,没有接受,所以只剩第一次的,n一直为1
c.fun(3);//1
还没有评论,来说两句吧...