javascript学习——块作用域和私有变量

  javascript没有块作用域的概念,只要是在块语句中定义的变量,实际上都是包含在函数中的。因此想要使用块作用域,需要再嵌套在一个函数中。例:

function alertDate(){
   (function(){
       var date = new Date();
       if(date.getMonth == 0 && date.getDate() ==1){
            alert("happy new year!");
       }
   })();

     alert(date);//会报错
}
  私有变量:任何在函数中定义的变量,都是私有变量,不能在函数外部访问这些变量。私有变量包括函数的参数、局部变量、函数内部定义的其他函数。如果想要在外部访问这些变量,需要使用this,升级为特权变量。其思想类似于java中的public 方法或变量。例:

function Person(name){
    this.getName = function(){
           return name;
    };
    this.setName(name){
       this.name = name;
   };
}

var person1 = new Person("xiaoming");
alert(person1.getName());//xiaoming
person1.setName("xiaohong");
alert(person1.getName());//xiaohong

    静态私有变量:在原型上定义公有方法。

( function(){
    var privateVariable = 10;
    function privateFunction(){
      return false;
    }
    MyObject = function(){};
    MyObject.prototype.publicMethod = function(){
        privateVariable ++;
        return privateFunction();
    };
})();

  和构造函数上定义特权方法的区别是,私有变量和函数是实例共享的。而原型上是都是用同一个函数,所以所有的实例操作它,都会改变该函数改变的值。

    模块模式:为单里创建私有变量和特权的方法。单例指的是只有一个实例的对象。

   

var singleton = function(){
   var name = "xiaoming";
   function getName(){ return "xiaoming";}

   return {
      publicName: "heihei";
      publicMethod: function(){ 
      name = "xiaohong";
      return getName();
       }
   };
}();

   增强的模块模式:适用于单例必须是某种特定类型的实例,同时还必须添加某些属性和方法对其加以增强的情况。

var singlton = function(){
    var privateVariable = 10;
    function privateFunction(){
      return false;
    }
    MyObject = new Custom(){};
    MyObject.publicMethod = function(){
        privateVariable ++;
        return privateFunction();
    };
   return MyObject;
}();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值