JavaScript扩充模块模式var名称重复

时间:2014-01-25 20:54:18

标签: javascript module-pattern

我们可以重用var名称而不会在JavaScript中覆盖其详细信息。请参阅下面的扩充模块模式示例

  <script>

var Module = (function () {

  // Module object 
  var module = {},
    privateVariable = "Hello World";

  function privateMethod() {
    // ...
  }

  module.publicProperty = "Foobar";
  module.publicMethod = function () {
    //console.log( privateVariable );
    return privateVariable;
  };
  return module;

})();

 //Defining same name MODULE var again
var Module = (function (my) {
      var newvar = 999;
    my.anotherMethod = function () {
         return newvar;
    };

    return my;
}(Module));



alert(Module.publicMethod()); 
//How this upper MODULE property is accessible ? Should be  hide by 
//next same name MODULE var?**
alert(Module.anotherMethod());

</script>

上面的代码运行完全正常,并在MODULE下添加了另一个AnotherMethod,但它仍然是如何访问初始模块属性。定义具有相同名称的var(MODULE)不应覆盖(删除)上层模块。

1 个答案:

答案 0 :(得分:0)

  

定义具有相同名称的var(MODULE)不得覆盖(删除)上层模块。

是的,应该。

扫描全局范围(或​​函数内部的函数)以查找var语句。由于您有两个相同的,第二个被忽略。 MODULE是在全局范围内创建的。

然后运行一个函数,然后将其返回值赋给MODULE

然后运行另一个函数,将当前值MODULE作为参数传递给它,然后将返回值赋给MODULE

var my = {}创建的对象的引用仍然存在于第二个函数的范围内,但是全局范围内对它的唯一引用已被覆盖。