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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值