我正在阅读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();
};
})();
答案 0 :(得分:2)
在第一个示例中,每次调用MyObject
时,都会创建一个新的局部变量privateVariable
。
在第二个示例中,privateVariable
是function(){ ... }
的一部分,只调用一次,因此只创建了一个变量。这一个变量由MyObject.prototype.publicMethod
使用,然后由MyObject
创建的所有对象共享。