我一直在阅读"雄辩的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 如果多个模块碰巧声称具有相同的名称,或者您想要将两个版本的模块并排加载,则此模式仍会导致问题。
问题是我无法理解模式问题,任何人都可以用更具体的方式解释我?感谢。
答案 0 :(得分:2)
代码基本上是创建一个名为weekDay
的全局变量(浏览器中的this
将在其建立的外部上下文中为windows
。因此,如果另一个模块也尝试创建一个名为'weekDay'的全局,那么您将发生冲突。最后一个定义它将获胜,另一个定义将被吹走。
如果你试图加载这个模块两次(为什么你会在这种情况下,但一般情况下),那么你不能,因为你只能在全局空间中有一个具有该名称的变量。