正常和按对象初始化变量的区别

时间:2015-11-21 18:12:22

标签: javascript

我有以下代码:

var Module = (function () {
   var parameters = {};
   var foo = function() {
      parameters = {'aaa': 'aaa2'};
      // Module.parameters = {'aaa': 'aaa2'};
   }; 
   return {
      foo: foo
   };
})();
var Module2 = (function () {
   var bar = function() {
      console.log(Module.parameters);
   };
   return {
      bar: bar
   };
})();

当我初始化这样的参数然后从Module2访问它时,我得到空对象。

但是当我用Module.parameters初始化它时,我得到了正确的结果。

这种差异来自哪里?

2 个答案:

答案 0 :(得分:1)

如果您使用var定义了一些本地变量,这意味着您可以在声明它的函数中访问该变量。当你定义类似module.foo =“value”的东西时,它就是一个对象的成员。如果您可以访问该对象,您也可以访问成员

答案 1 :(得分:0)

让我们稍微简化一下。想象一下你有

var x = 42;
var obj = {
  y: 21,
};

您目前正在执行与访问obj.x相同的操作。但是obj没有这样的属性。它只有属性yx只是一个变量,完全独立于obj

对于parametersfoo,情况也是如此。您要返回的对象

return {
   foo: foo
};

只有一个属性fooparameters是一个与对象无关的变量。

分配给Module.parameters“有效”,因为您正在改变您返回的对象,添加新属性。它等同于

obj.x = 'something';

在我的例子中。