CMD、AMD、CommonJS 规范

  • 为什么要使用模块化?
    1解决命名冲突,避免全局污染
    2解决依赖管理
    3提高代码可读性
    4提高复用性
  • 原始写法
function fn1(){
      //todo
}
function fn2(){
      //todo
}
  • 对象写法
  var obj = {
    var a : 1,
    fn1 : function (){
      //todo
    },
    fn2 : function (){
      //todo
    }
  };
  • 立即执行函数写法: 模块化的基础,模块外部无法修改我们没有暴露出来的变量、函数。
var Fn = function()({
        var a = 1;
        var b = 2;
        function fn1() {
              //todo
        }
        function fn2() {
              //todo
        }
        return {
              fn1: fn1,
              fn2: fn2
        }
})()
  • CMD、AMD、CommonJS 规范分别指什么?有哪些应用

  • CommonJS : NodeJS提出的服务器端的模块化规范。只运行在服务器端的规范,不能运行在浏览器端。规范规定每个文件就是一个模块,有独自的作用域,module代表当前模块,exports属性就是它的一个接口,在加载时,使用require()
    来加载这个模块,exports来提供接口。


    CommonJS规范的写法

    用CommonJS规范运行在服务器上
  • AMD:Asynchronous Module Definition,运行在浏览器端模块化开发的规范。使用该规范的有requireJS。AMD规范加载模块需要把所有的模块都写入参数里,用多少写多少。AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:

  require([module], callback);
AMD加载模块
  • CMD:Common Module Definition,运行在浏览器端模块化开发的规范。使用该规范的有SeaJS。CMD规范的写法与CommonJS规范相似,区别在于使用define包裹代码。


    CMD规范
  • AMD与CMD区别:

  • 模块定义时对依赖的处理不同
    AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块
    CMD推崇就近依赖,只有在用到某个模块的时候再去require

  • 同为异步加载模块的区别:
    AMD在加载模块完成后就会执行该模块,所有模块都加载执行完后会进入require的回调函数执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行。
    CMD加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的。性能较好,只有用户需要时才执行

饥人谷课件
阮一峰:模块化编程
模块化开发的价值

本博客版权归 本人和饥人谷所有,转载需说明来源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容