第一次发博文 难免有点小紧张 毕竟菜鸟害怕大神 。回到正题 为什么要有CommonJS? 首先 对我们起初的javascript,没有模块的概念 致使我们的小脚本仅仅在前端浏览器上面 发出它小小的光芒 ,于是一帮欧洲的帅小伙想要把Commonjs 应用到前端上来 这个时候就在JS中有了Commonjs规范 它的提出就是为了解决没有模块这个概念的瓶颈 它规定每一个js文件都是一个模块 模块与模块之间可以相互依赖 每个模块都是一个独立的作用域 那模块与我们的函数封装又有什么区别呢 显然 我们的函数封装是会污染到全局的 也许有的宝贝们会说 可以通过对象方式 把功能模块作为对象的方法 这样不就避免了污染的这个问题 答案是可以的 但是这样外部人员可以随时修改我们的内部属性 ,是不安全的, 模块的提出 解决了js中全局变量“污染”全局的问题。 但是我们的Commonjs由于是同步加载 对于我们天生异步的浏览器来说 是不行的 这造成Commonjs只能在我们node平台上运行 因为它其实就是属于后端的东西,于是出来了AMD CMD两个规范, AMD属于革命派 CMD属于改良派 。它们的代表分别为 requirejs和seajs 。它们都是define去定义一个模块 都是定义异步加载 AMD是用return的方式去输出一个模块 而CMD则保留了commonjs的moudle.exports方式去输出一个模块 在加载模块的时候 AMD是一种依赖前置的方式 对于要依赖的模块 在require的参数数组中全部罗列出来 而CMD是一种依赖后置的方式 需要依赖哪个模块 我就给你加载哪个模块。