Javascript模块模式。如何访问模块内的全局文件
我已经看到了下面的代码Javascript模块模式。如何访问模块内的全局文件,javascript,module,closures,Javascript,Module,Closures,我已经看到了下面的代码 var MODULE = (function () { var my = {}, privateVariable = 1; function privateMethod() { // ... } my.moduleProperty = 1; my.moduleMethod = function () { // ... }; return my; }()); 属性可以像MODULE.moduleProperty一样访问,对吗? 但是如何访问
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();
将调用private方法(并警告“this is private!”)并返回privateVariable的值
无法访问模块范围外的privateVariable或privateMethod
var MODULE = (function() {
//...declare your module as above
}());
console.log(MODULE.privateVariable); //logs undefined
希望这能帮你清理一下。你可以直接使用/打电话给他们,对吗?因为它们是在模块闭包的范围内声明的,所以闭包内的所有内容都可以访问它们。我遗漏了什么吗?好吧…所以我不能在闭包之外访问它们,对吗?…所以提供隐私?是的,这就是闭包的要点(和模块模式)。在闭包内声明的任何变量都可以在闭包内访问,但不能在闭包外访问,除非它被指定为模块对象的属性。