闭包产生私有化变量,防止命名空间的污染

<script>
    /*下面三个函数分别和Deng形成了闭包,共同用Deng的闭包
    PrepareWife这个变量能用,但是无法访问,因为它不是对象生成的东西,是对象和原有空间生成的闭包,这就是私有化变量
    */
   function Deng(name,wife){
     
     
     var prepareWife="xiaozhang";
     this.name=name;
     this.wife=wife;
     this.divorce=function(){
     
     
       this.wife=prepareWife;
     }
     this.changePrepareWife=function(target){
     
     
       prepareWife=target
     }
     this.sayPrapreWife=function(){
     
     
       console.log(prepareWife);
     }
   }
    var deng=new Deng('deng','xiaoliu')
  </script>

<script>
  var name='bcd'
  var init=(function(){
     
     
    var name='abc';
    function callName(){
     
     
      console.log(name);
    }
    //留出一个接口  传给init
    return function(){
     
     
      callName()
    }
  }())
   init();//执行的结果abc不是bcd  因为形成了闭包,闭包变量私有化,不污染全局变量

   /*入口函数取名为init,约定俗成的用法*/
   var initDeng=(function(){
     
     
     var name=123;
     function callName(){
     
     
       console.log(name);
     }
     return function(){
     
     
       callName()
     }
   }())
  </script>
  

在这里插入图片描述

<script>
    function Person(name) {
     
     
      /*
            new完以后的隐式操作
            var this={
                   makeMoney:function(){}
                   offer:function(){}
            }
            
      */
      var money = 100; //不给显示出来,只能通过方法来改,这就是私有化属性  外部不能访问  在方法的作用域链里
      this.name = name;
      this.makeMoney = function () {
     
     
        money++;
      }
      this.offer = function () {
     
     
        money--;
      }
      /*
       return this;  这样就产生了闭包
      */
    }
    var person = new Person()
  </script>
 <script>
    function Person(name,age,sex) {
     
     
      var a = 0;
      this.name=name;
      this.age=age;
      this.sex=sex;
      function sss(){
     
     
        a++;
        console.log(a);
      }
      this.say=sss;
    }
    var oPerson=new Person();
    oPerson.say();//1
    oPerson.say();//2
    var oPerson1=new Person();//new了个新的Person,产生了新的AO,和闭包
    oPerson1.say()//1

  </script>

猜你喜欢

转载自blog.csdn.net/x1037490413/article/details/108960765