即兴的模块
2015 年之前,JavaScript 语言没有内置的模块系统。 然而,尽管人们已经用 JavaScript 构建了十多年的大型系统,他们需要模块。
所以他们在语言之上设计了自己的模块系统。 你可以使用 JavaScript 函数创建局部作用域,并使用对象来表示模块接口。
这是一个模块,用于日期名称和数字之间的转换(由Date的getDay方法返回)。 它的接口由weekDay.name和weekDay.number组成,它将局部绑定名称隐藏在立即调用的函数表达式的作用域内。
const weekDay = function() {const names = ["Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"];return {name(number) { return names[number]; },number(name) { return names.indexOf(name); }};}();console.log(weekDay.name(weekDay.number("Sunday")));// → Sunday
这种风格的模块在一定程度上提供了隔离,但它不声明依赖关系。 相反,它只是将其接口放入全局范围,并希望它的依赖关系(如果有的话)也这样做。 很长时间以来,这是 Web 编程中使用的主要方法,但现在它几乎已经过时。
如果我们想让依赖关系成为代码的一部分,我们必须控制依赖关系的加载。 实现它需要能够将字符串执行为代码。 JavaScript 可以做到这一点。
