javascript闭包

一、什么是闭包:

简单的说:父函数,包着子函数。子函数可以引用父函数的参数和变量,参数和变量不会被垃圾回收所收回,看下面的例子。
function a(cc){
	var aa = 5;
	 function b(){
		alert(cc)
		alert(aa)
	}
	b()
}
a(3)
 二、用闭包有什么好处:
可以让一个变量长期存在于内存中,例如
function aaa(){
	var a = 5;
	function bbb(){
		alert(a)
	}
	return bbb;

}
var c = aaa();//aaa函数已经执行完毕,
c()
避免全局变量的污染,例如:
function aaa(){
	var a = 1;
	return function(){
		a++
		alert(a)
	}
}
var b =  aaa();
b();
b()
可以有,私有成员(私有方法)的存在,例如:
var aaa = (function(){
	var a = 1;
	function bbb(){
		a++
		alert(a)
	}
	function ddd(){
		a++
		alert(a)
	}
	return {
		b:bbb,
		d:ddd
	}
})()
aaa.b();
aaa.c()
三、闭包有什么用处
模块化代码,减少全局变量的污染,例如:
var aaa = (function(){
	var a = 1;
	return function(){
		a++
		alert(a)
	}
})()
aaa();
aaa()
在循环中直接找到对应元素的索引,例(有多个li)
var lis = document.getElementsByTagName("li");
	for (var i = 0; i <lis.length; i++) {
		(function(i){
			lis[i].onclick = function(){
				alert(i);
			};
		})(i)
		
	};
在循环中直接找到对应元素的索引,另一种写法,用return;
for (var i = 0; i <lis.length; i++) {
			lis[i].onclick = (function(i){
				return function(){
					alert(i);
				}
			})(i);
	};
四、闭包需要注意的什么
IE会引发内存泄露:
内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束,使CPU不断增加。
例如:
//满足IE内存泄露的条件,一个变量获取dom节点,他的一个属性比如onclick去引用一个内部函数,而这个内部函数变量又去引用外部这个对象。这样就会存在内存泄露。
window.onload = function(){
	var Odiv = document.getElementById("div");
	Odiv.onclick = function(){
		alert(Odiv.id)
	}
}
/*解决办法*/
window.onunload = function(){
	Odiv.onclick = null;
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值