最新文章:
首页 javascript
js闭包讲解[高级程序员之路]
发布时间:2015年12月26日 阅读数:3282
-
闭包
函数内部定义函数,连接函数内部和外部的桥梁
闭包的作用有2个:
一是前面提到的读取函数内部的变量,
二是让这些变量的值保存在内存中,实现数据共享
下面是几个闭包的例子
<script type="text/javascript">
var cnt=(function(){
var i=0;
return function(){
alert(i);
i++;
}
})();
cnt();//0
cnt();//1
cnt();//2
cnt();//3
</script>
把匿名函数的执行结果(即对里面子函数的声明赋给全局变量cut),i就保存在内存里了执行cut()时就直接从内存取值了,i只有cnt()函数才能调用,直接alert(i)是不行的
还可以向闭包内传参
var cnt=(function(num){
return function(){
alert(num);
num++;
}
})(5);
cnt();//5
cnt();//6
cnt();//7
//当然还可以调用时传参
var cnt=(function(){
var i=0;
return function(num){
num+=i;
alert(num);
i++;
}
})();
cnt(1);//1
cnt(2);//3
cnt(3);//5
为了对闭包有更好的理解,我们看以下代码
function box(){
var arr=[];
for(var i=0;i<5;i++){
arr[i]=(function(num){
return function(){return num;}
})(i);
}
return arr;
}
var arr=box();
for(var i=0;i<5;i++){
alert(arr[i]());//0,1,2,3,4
}
使用闭包的注意点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
本文作者:初心
文章标题: js闭包讲解[高级程序员之路]
本文地址:http://www.5wcx.com/js/8.html
版权声明:若无注明,本文皆为“许敬轩的个人主页 - 勿忘初心,方得始终,个人博客,技术经验分享”原创,转载请保留文章出处。
本文地址:http://www.5wcx.com/js/8.html
版权声明:若无注明,本文皆为“许敬轩的个人主页 - 勿忘初心,方得始终,个人博客,技术经验分享”原创,转载请保留文章出处。
相关文章
您可以选择一种方式赞助本站
支付宝转账赞助
