最新文章:

首页 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
版权声明:若无注明,本文皆为“许敬轩的个人主页 - 勿忘初心,方得始终,个人博客,技术经验分享”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
sitemap