js的闭包
整理一下:
1:什么是闭包?
a.函数嵌套函数
function aaa(){ function bbb(); }
b.内部函数能够引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回
function aaa(){ var a = 5; function bbb(){ alert(a); } return bbb; } var c = aaa(); c();
2.闭包有什么好处?应用在那里?
好处:
1.希望一个变量长期驻扎在内存当中:如上b
2.避免全局变量的污染(为了性能,尽量少使用全局变量)
var aaa = (function(){ var a = 1; return function(){ a++; alert(a); } })(); aaa(); //2 aaa(); //3
3.私有成员的存在
var aaa = (function(){ var a = 1; function bbb(){ a++; alert(a); } function ccc(){ a++; alert(a); } return { b : bbb, c : ccc } })(); aaa.b(); //2 aaa.c(); //3
用法:
1.模块化代码
2.在循环中直接找到对应元素的索引
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script>
window.onload = function(){
var aLi = document.getElementsByTagName('li');
/*for(var i=0;i<aLi.length;i++){
(function(i){
aLi[i].onclick = function(){
alert(i);
};
})(i);
}*/
for(var i=0;i<aLi.length;i++){
aLi[i].onclick = (function(i){
return function(){
alert(i);
}
})(i);
}
};
</script>
</head>
<body>
<ul>
<li>11111111111</li>
<li>11111111111</li>
<li>11111111111</li>
</ul>
</body>
</html>
3.闭包需要注意得地方?
IE下会引发内存泄漏:所谓泄露就是说,资源不会被释放,会在cpu离累加,知道浏览器关闭