AMD和CMD

题目1: 为什么要使用模块化?

1. 解决命名冲突
2. 依赖管理
3. 可以提高代码的可读性
4. 提高代码的复用性
5. 避免污染全局变量

题目2:CMD、AMD、CommonJS 规范分别指什么?有哪些应用

- **AMD(异步模块定义)**:由于浏览器加载脚本天生异步,AMD是一个在浏览器模快化开发的规范,但是由于元素的js并没有define()和require(),所以AMD规范运用了requirejs库。

- ** CMD(通用模板定义)**:也是异步加载模块,它和AMD只是模块定义的方式和模块记载的时机不同

AMD和CMD的区别以及运用

  1. 都运用于浏览器端的异步加载资源
  2. AMD是全部加载后,然后需求使用,而CMD是按需加载,就近依赖
  3. AMD在加载模块完成后就会执行模块,所有模快都记载完成后,就会进入required的回调函数,执行主逻辑函数,,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行。
  4. CMD加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的
```
  //AMD
  define(['jquery','dailog','carousel'],function(jquery,dailog,Carousel){
    var $=jquery;
    var dailog=dailog;
    var Carousel=Carousel;
  })
  //CMD
  //1. 定义一个模快myModule.js
  define(function(require,exports,module){
    var $=require(jquery);
    $("div").addClass("active");
    exports.add=function(){
      var i=0;
      i++
      return i
    }
  })
  define(function(require,exports,module){
    var sum=require("myModule").add;
    console.log(sum)
  })
```
  • CommonJS:是服务器端模快的规范,Node.js就是运用这个规范,使用与同步加载资源,一个单独的文件就是一个模快,每一个模快都有一个单独的作用域。

    1. 不需要引用其它的库,node.js自动封装了一个2个对象用于模快的输出和请求
    2. module.exports 模快的唯一出口,我们需要把模快要输出的东西放入该对象。
    3. require()   加载模块使用`require`方法,该方法读取一个文件并执行,返回文件内部的`module.exports`对象
    
      //定义一个a.js文件
      var name="hcc";
      function printName(){
        console.log(name)
      }
      module.exports={
        printName:printName
      }
      //在b.js中引用a.js
      var b= require('./a')  //接受a.js的exports的值 
      b.printName()    //输出hcc
    

    浏览地址

    代码地址

你可能感兴趣的:(AMD和CMD)