Javascript模块模式。如何访问全局模块
问题描述:
里面我看到了下面的代码Javascript模块模式。如何访问全局模块
var MODULE = (function() {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function() {
// ...
};
return my;
}());
属性可以像MODULE.moduleProperty访问,对吧? 但是,如何访问模块内的全局变量privateVariable和privateMethod()(这是全局变量模块的错误...)
答
只能从内部模块代码本身访问它们的方式:
var MODULE = (function() {
var my = {},
privateVariable = 1;
function privateMethod() {
alert('this is private!');
}
my.moduleProperty = 1;
my.moduleMethod = function() {
privateMethod();
return privateVariable;
};
return my;
}());
这样做:
MODULE.moduleMethod();
将调用私有方法(和警惕“!这是私人地方”)和返回privateVariable的值。
无法访问MODULE范围之外的privateVariable或privateMethod。
var MODULE = (function() {
//...declare your module as above
}());
console.log(MODULE.privateVariable); //logs undefined
希望能够帮助您为您解决问题。
答
不,它们不是全局变量,它们是匿名函数中的局部变量。
您可以从函数中的任何代码访问它们,但在函数之外它们不能直接访问。
你可以直接使用/直接调用它们,对吗?由于它们是在模块关闭的范围内声明的,因此该关闭中的所有内容都可以访问它们。我错过了什么吗? – maerics 2012-04-26 16:30:46
好的......所以我不能在封闭之外访问它们......所以提供隐私? – 2012-04-26 16:32:04
是的,这是关闭点(和模块模式)。在闭包中声明的任何变量都可以在闭包中访问,但不在其外部,除非它被指定为模块对象的属性。 – maerics 2012-04-26 16:34:10