定义:能够在函数的外部访问该函数内部变量的函数成为闭包函数。
一个经典的闭包例子:点击ul下的li时alert其index值。
html:
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
js:
var ul=document.getElementsByTagName("ul")[0];
var li=ul.children;
for(var i=0;i<li.length;i++){
li[i].onclick=(function(i){
return function(){
console.log(i) // 0,1,2
}
})(i)
}
闭包的优点是可以避免全局变量的污染。
缺点:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量赋值为空即可。
另外两种不使用闭包来实现的方法:
一:
var ul=document.getElementsByTagName("ul")[0];
var li=ul.children;
for(let i=0;i<li.length;i++){
li[i].onclick=function(){
console.log(i)
}
}
二:
var ul=document.getElementsByTagName("ul")[0];
var li=ul.children;
for(var i=0;i<li.length;i++){
li[i].index=i;
li[i].onclick=function(){
console.log(this.index)
}
}