zoukankan      html  css  js  c++  java
  • 闭包的概念和实例

    闭包的概念

    什么是闭包呢? 闭包(Closure),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

    其实js中,每个函数就是一个闭包。函数和自己的内部定义的变量绑定在一块,组合成的实体就是闭包。只不过在特殊的情况下,即使函数执行完成了,由于某些原因导致函数内部的变量仍然被外界所引用,所以垃圾回收并不释放函数相关的所有内容,而且将函数和必要的变量组成一个闭包的实体,不释放,直到没有外界变量再指向当前的函数的内部的变量那么闭包就会释放掉。

    闭包的实例

    例1:

        function Persion() {
        var t = {};
        t.name = "itcast";
        t.age = 19;
        return t;
       }

        var p  = new Persion();
       p.age;

      
       function Persion() {
        var ageProp  = 19;
        var nameProp = "flydragon";
        var phone = "110";   //私有变量
        
        function getPhone() {       //定义属性 get 方法
         return phone;
        }

         function setPhone( value ){ //定义属性 set 方法
         phone = value || "";
        }

        var showFun  = function() {
         console.log( nameProp + "  " + ageProp );
        };

        return {
         age  : ageProp,
         name : nameProp,
         show : showFun,
         get_phone : getPhone,
         set_phone : setPhone
        };

    }

        var p = new Persion();
       p.show();
       console.log( p.get_phone() );

    例2:如何让嵌套函数的父函数访问子函数的内部变量?

    function father() {

    his.get_age = child();
         function child() {
          var child_value = "child";
          return function() {
           return child_value;
          }

       }

     }

       var f = new father();
        //子函数的早已经执行完毕,但是还能访问到子函数内部的变量值。
        f.get_age();

    例3:全局变量(或者外部变量)

       function father() {
         var get_value ;
         function child() {
          var child_value = 199;
          get_value = function() {
           return child_value;
          }
         }
         return {
          get : get_value;
         }
        }

    var f = new father();
        f.get();

    例4:

    function father() {
         this.f_name   = "fater";
         this.childAge = child();
     function child() {
          var c_age = 19;  //私有变量
          return {
           set_age : function ( value ) {
            c_age = value;
           },

    get_age : function () {
            return c_age;
              }

            }
          }
        }

    var f = new father();
        f.childAge.set_age(188);
        console.log( f.childAge.get_age() );

    重来没有接触过,零基础学习软件编程,一个字累
  • 相关阅读:
    20Spring_JdbcTemplatem模板工具类
    19Spring_AOP编程(AspectJ)_使用@Pointcut注解来定义切点
    18Spring_AOP编程(AspectJ)_AspectJ的各种通知总结
    17Spring_AOP编程(AspectJ)_AspectJ的注解编程
    14Spring_AOP编程(AspectJ)_环绕通知
    android ViewPager滑动事件讲解
    为listview的item中的元素设置onclick事件
    Android EditText光标颜色 与inputType
    【Android】Android内存溢出问题---用自行开辟的空间进行对内存管理
    【Android】eclipse打不开的解决办法和“Jar mismatch! Fix your dependencies”的解决
  • 原文地址:https://www.cnblogs.com/hsha/p/4614720.html
Copyright © 2011-2022 走看看