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

希望这能帮你清理一下。

你可以直接使用/打电话给他们,对吗?因为它们是在模块闭包的范围内声明的,所以闭包内的所有内容都可以访问它们。我遗漏了什么吗?好吧…所以我不能在闭包之外访问它们,对吗?…所以提供隐私?是的,这就是闭包的要点(和模块模式)。在闭包内声明的任何变量都可以在闭包内访问,但不能在闭包外访问,除非它被指定为模块对象的属性。