闭包:
是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是
在一个函数内创建另一个函数
,
通过另一个函数访问这个函数的局部变量
闭包的特性
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
使用闭包的好处
1.希望一个变量长期驻扎在内存中
2.避免全局变量的污染
3.私有成员的存在
使用闭包的缺点
1.变量常驻内存,会增大内存使用量
2.使用不当造成内存泄漏
3.私有成员的存在
例子:
一、全局变量的累加
<script>
vara=1;
functionabc(){
a++;
alert(a);
}
abc(); //2
abc(); //3
</script>
<script>
vara=1;
functionabc(){
a++;
alert(a);
}
abc(); //2
abc(); //3
</script>
二、局部变量的累加
functionaaa(){
vara=1;
returnfunction(){
alert(a++)
};
}
varfun=aaa();
fun();// 1 执行后 a++,,然后a还在~
fun();// 2
fun=null;//a被回收!!
三、函数声明
functionaaa(){
vara=1;
returnfunction(){
alert(a++)
};
}
varfun=aaa();
fun();// 1 执行后 a++,,然后a还在~
fun();// 2
fun=null;//a被回收!!
<script>
functionabc(){
alert(123);
}
abc();
</script>
四、
函将函数声明变为一个表达式
<script>
(function(){
var a = 10;
alert(a);
})(); //然后通过()直接调用前面的表达式即可,因此函数可以不必写名字;
</script>
五、
闭包的使用方法
<script>
varabc=(function(){ //abc为外部匿名函数的返回值
vara=1;
returnfunction(){
a++;
alert(a);
}
})();
abc(); //2 ;调用一次abc函数,其实是调用里面内部函数的返回值
abc(); //3
abc = null;
</script>
六、闭包的使用方法
<span style="font-size:18px;"><script>
varfun=(function(){
vara=10;
functionbbb(){
a++;
alert(a);
}
functionccc(){
a++;
alert(a);
}
return{
b:bbb, //json结构
c:ccc
}
})();
fun.b(); //12
fun.c() //13
</script></span>
七、闭包的使用方法
<script>
window.οnlοad=function(){
varp=document.getElementsByTagName('p');
for(vari=0;i<p.length;i++){
(function(i){
p[i].οnclick=function(){
alert(i);
};
})(i);
}
};
</script>