首页 > 试题广场 >

阐述什么是AMD和CMD,并说明两者的区别?

[问答题]
阐述什么是AMDCMD,并说明两者的区别?

AMD 是 RequireJS 在推广过程中对模块定义提出的概念。
CMD 是 SeaJS 在推广过程中对模块定义提出的概念。

RequireJS 和 Sea.js 都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然。

不同之处

两者的主要区别如下:

  1. 定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。

  2. 遵循的规范不同。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。

  3. CMD 推崇依赖就近,AMD 推崇依赖前置
  4. 推广理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
  5. 对开发调试的支持有差异。Sea.js 非常关注代码的开发调试,有 no***、debug 等用于调试的插件。RequireJS 无这方面的明显支持。
  6. 插件机制不同。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。
发表于 2019-01-22 11:37:48 回复(0)

AMD

  • AMD(Asynchronous Module Definition):异步模块定义
  • 采用异步方式加载模块,模块的加载不影响它后面语句的运行。
  • 所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
  • 采用require()语句加载模块但是不同于CommonJS,它要求两个参数,第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数
发表于 2019-08-05 00:13:21 回复(0)