AMD和CMD
2017-07-13 本文已影响23人
sunny519111
题目1: 为什么要使用模块化?
1. 解决命名冲突
2. 依赖管理
3. 可以提高代码的可读性
4. 提高代码的复用性
5. 避免污染全局变量
题目2:CMD、AMD、CommonJS 规范分别指什么?有哪些应用
- **AMD(异步模块定义)**:由于浏览器加载脚本天生异步,AMD是一个在浏览器模快化开发的规范,但是由于元素的js并没有define()和require(),所以AMD规范运用了requirejs库。
- ** CMD(通用模板定义)**:也是异步加载模块,它和AMD只是模块定义的方式和模块记载的时机不同
AMD和CMD的区别以及运用
- 都运用于浏览器端的异步加载资源
- AMD是全部加载后,然后需求使用,而CMD是按需加载,就近依赖
- AMD在加载模块完成后就会执行模块,所有模快都记载完成后,就会进入required的回调函数,执行主逻辑函数,,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行。
- 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
浏览地址
代码地址