很少有大型项目会将所有代码放在一个文件中,一开始将代码放在不同的文件中并按特定顺序组合起来足够容易,但这很快就变得难以管理。使用称为“失去增强”的未知模式,我们实际上可以利用JavaScript异步运行时环境。
为了实现这个模式,我们需要一小段逻辑。
我们要说如果awesomeNewModule存在,则导入它,否则awesomeNewModule只是一个新对象:
var awesomeNewModule = (function(){
var exports={
foo:5,
bar:10
};
exports.helloMars = function(){
console.log("Hello Mars!");
};
exports.goodbye = function(){
console.log("Goodbye!");
}
return exports;
}(awesomeNewModule || {}));
由于我们使用了 exports 关键字,因此在这里,我们将说 awesomeNewModule 是一个函数内的 exports,现在,如果这是第一个文件,则所有这些值的 exports {foo:5, bar:10} 将被分配给空对象 {},否则将会被分配并扩展已经创建的 awesomeNewModule 如果该文件在模块已经创建后被加载。
var awesomeNewModule = (function(exports){
var exports={
foo:5,
bar:10
};
exports.helloMars = function(){
console.log("Hello Mars!");
};
exports.goodbye = function(){
console.log("Goodbye!");
}
return exports;
}(awesomeNewModule || {}));
保持在心中的一件重要事情是,如果awesomeNewModule已经存在,那么您应该确保这些键{foo:5,bar:10}以及这些方法exports.helloMars,exports.goodbye都不存在于awesomeNewModule中。如果是这样,则加载最后的文件将覆盖任何在之前文件中命名相同的方法或值。
因此,您不能跨模块共享值,如果一个模块的任何方面依赖于另一个模块,则无法安全地依赖这些值,但归根结底,编写模块或代码的整个目的是将您的应用程序分成不互相依赖的部分,这样如果一个模块向应用程序引入破坏性错误,则不会影响其他代码的运行。此外,有安全的方法可以确保一个模块不会覆盖来自其他模块创建的模式或方法。