AMD和CMD

作者: sunny519111 | 来源:发表于2017-07-13 09:30 被阅读23次

    题目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

          本文链接:https://www.haomeiwen.com/subject/rwxwhxtx.html