Appearance
闭包
是一个函数,外加该函数作用域的连接。闭包"关闭"了函数的自由变量。
javascript
function fun(){
var a = 10;
return function(){
console.log(a);
}
}
fun()()- 优点
内部函数可以访问外部函数的局部变量
- 缺点
变量驻留,造成内存损耗
在ie浏览器中会造成内存泄漏
- 用例
javascript
var lis = document.getElementsByTagName('li')
for(var i=0; i<lis.length;i++){
(function(i){
lis[i].onClick = function(){
alert(i);
}
})(i)
}
// 如果不用闭包代码如下
/*
for(var i=0; i<lis.length;i++){
lis[i].onClick = function(){
alert(i);
}
}
功能预想:有一堆li标签,当我点击哪个就把哪个的序号反馈
不用闭包时,当我们在页面上去点击,for循环已经完成遍历,所以不用闭包的情况下,i的长度会是lis.length
如果使用闭包,每一次循环都会创建一个闭包里的函数,每个函数的变量也都是新建的,也即是独立的,又由于闭包的特性,函数里的变量难以找到释放的时机,所以此时点击结果是正确的
*/