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

    科技2025-06-15  11

    <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>
    Processed: 0.009, SQL: 8