对象作为接口

时间:2017-02-01 23:21:51

标签: javascript

我一直在阅读"雄辩的javascript"我可以在modules章节中找到一件小事。

他(作者)给我们这个代码:



(function(exports) {
  var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday"];

  exports.name = function(number) {
    return names[number];
  };
  exports.number = function(name) {
    return names.indexOf(name);
  };
})(this.weekDay = {});

console.log(weekDay.name(weekDay.number("Saturday")));
// → Saturday




但接下来他说的是:

以前的模式通常由用于浏览器的JavaScript模块使用。该模块将声明一个全局变量并将其代码包装在一个函数中,以便拥有自己的私有命名空间。 B 如果多个模块碰巧声称具有相同的名称,或者您想要将两个版本的模块并排加载,则此模式仍会导致问题。

问题是我无法理解模式问题,任何人都可以用更具体的方式解释我?感谢。

1 个答案:

答案 0 :(得分:2)

代码基本上是创建一个名为weekDay的全局变量(浏览器中的this将在其建立的外部上下文中为windows。因此,如果另一个模块也尝试创建一个名为'weekDay'的全局,那么您将发生冲突。最后一个定义它将获胜,另一个定义将被吹走。

如果你试图加载这个模块两次(为什么你会在这种情况下,但一般情况下),那么你不能,因为你只能在全局空间中有一个具有该名称的变量。