因此我们需使用函数作用域来模拟这个概念。
由于闭包的存在,声明的变量和方法只在该模式内部可用,
但在返回对象上的定义的变量和方法,则对外部使用者都是可用的。
var testModule = (function () {
//私有变量
var myPrivateVar = 0;
//记录所有参数的私有函数
var myPrivateMethod = function(bar){
console.log(bar);
}
return {
//公有变量
myPublicVar : "foo",
//调用私有变量和方法的公有函数
myPublicFunction: function(bar){
//增加私有计数器值
myPrivateVar++;
console.log(myPrivateVar);
//传入bar调用私有方法
myPrivateMethod(bar);
}
};
})();
console.log(testModule);
//用公有变量传值公有函数
testModule.myPublicFunction(testModule.myPublicVar);
输出
{ myPublicVar: 'foo',
myPublicFunction: [Function: myPublicFunction] }
1
foo
可以看到,testModule 返回 1个函数,1个变量,但是,并没有myPrivateVar变量。
却可以,通过两个函数来操控,myPrivateVar表现得就像一个私有变量。