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离累加,知道浏览器关闭

原文地址:https://www.cnblogs.com/angleyuli/p/4730844.html