写给自己的 JavaScript 知识点拾遗 - 1

模块化

模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块。那么在理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可。

我理解的模块化是当我们面对一个很复杂的问题时,按照一种标准把问题进行分解,再进行处理。针对每个类别的问题,抽象出通用的解决方案,就是一个模块。一个复杂的系统可以有很多个模块结合组成,但是每个模块间却是独立的。这对于软件开发来说,它使得一个巨大的系统被整合成符合人脑思维的逻辑性很强的模块,使得管理,开发,维护变得有针对性,有条理性,这个改变是巨大的。

一个模块化的系统必须具备的能力有:定义封装的模块,定义新模块对其他模块的依赖,可对其他模块的引入支持。

CommonJS

CommonJS 是用于服务端的 JavaScript 模块规范,我们常用的 NodeJS 就是基于这个规范。在 CommonJS 下,一个文件就是一个模块,使用 require 方法加载并执行文件来得到文件内 exports 对象。
每个模块是需要先进行加载才能够执行的,不支持异步加载。相对于服务器的环境,这是合理的。

1
2
3
var monent = require('./moment');

moment.now();

AMD

“Asynchronous Module Definition” 缩写即 AMD,通俗的说就是异步模块加载。适用在浏览器环境下。解决的 CommonJS 应用在浏览器环境的问题。RequireJS 就是遵循 AMD 规范的。

AMD就只有一个接口:define(id?,dependencies?,factory);

AMD 首先定义模块,然后异步加载模块,加载完成后在回调函数中执行。但是需要开始就要把所有的依赖进行声明。推崇依赖前置。

CMD

“Common Module Definition” 缩写即 CMD,它与 AMD 是相近的,同样也是适用在浏览器环境下。大名鼎鼎的玉伯搞了个 SeaJs,就是这个规范下的。推崇的是依赖就近。同样是是加载模块。

AMD 和 CMD 最大的区别就是对依赖模块的处理时机不同。更详细的点播可以看玉伯大大的知乎回复