0

我看过下面的代码

var MODULE = (function () {
var my = {},
    privateVariable = 1;

function privateMethod() {
    // ...
}

my.moduleProperty = 1;
my.moduleMethod = function () {
    // ...
};

return my;
 }());

可以像 MODULE.moduleProperty 一样访问属性...对吗?但是如何访问模块内部的全局变量 privateVariable 和 privateMethod()(它们是模块内部的全局变量......对吗?)

4

2 回答 2

1

不,它们不是全局变量,它们是匿名函数内部的局部变量。

您可以从函数内的任何代码访问它们,但在函数之外它们不能直接访问。

于 2012-04-26T16:33:39.963 回答
1

您只能从模块代码本身中访问它们,如下所示:

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

希望这有助于为您解决问题。

于 2012-04-26T16:46:45.060 回答