为什么JavaScript中的静态私有变量是静态的?

时间:2017-01-09 07:08:59

标签: javascript

我正在阅读Nicholas C. Zakas的Web开发人员第三版JavaScript(旧的,我知道),我很难理解为什么静态私有变量/函数首先是静态的。我理解如果我声明一个带有私有变量/函数的构造函数,它的所有实例都会有自己的私有变量/函数,就像在Zakas的一个例子中那样:

function MyObject(){

    //private variables and functions 
    var privateVariable = 10;

    function privateFunction(){ 
        return false;
    }

    //privileged methods 
    this.publicMethod = function (){
        privateVariable++;
        return privateFunction(); 
    };
}

那么如何将私有变量/函数放在私有作用域中使变量变为静态?是因为它们被封闭在一个私人范围内,还是有一些我忽略的东西?这是Zakas关于静态私有变量的一个例子:

(function(){

   //private variables and functions 
   var privateVariable = 10;

   function privateFunction(){ 
      return false;
   }

   //constructor
   MyObject = function(){ 
   };

   //public and privileged methods
   MyObject.prototype.publicMethod = function(){ 
      privateVariable++;
      return privateFunction();
   }; 
})();

1 个答案:

答案 0 :(得分:2)

在第一个示例中,每次调用MyObject时,都会创建一个新的局部变量privateVariable

在第二个示例中,privateVariablefunction(){ ... }的一部分,只调用一次,因此只创建了一个变量。这一个变量由MyObject.prototype.publicMethod使用,然后由MyObject创建的所有对象共享。