- 为什么要使用模块化?
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来提供接口。
AMD:Asynchronous Module Definition,运行在浏览器端模块化开发的规范。使用该规范的有requireJS。AMD规范加载模块需要把所有的模块都写入参数里,用多少写多少。AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:
require([module], callback);
-
CMD:Common Module Definition,运行在浏览器端模块化开发的规范。使用该规范的有SeaJS。CMD规范的写法与CommonJS规范相似,区别在于使用define包裹代码。
AMD与CMD区别:
模块定义时对依赖的处理不同
AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块
CMD推崇就近依赖,只有在用到某个模块的时候再去require同为异步加载模块的区别:
AMD在加载模块完成后就会执行该模块,所有模块都加载执行完后会进入require的回调函数执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行。
CMD加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的。性能较好,只有用户需要时才执行
本博客版权归 本人和饥人谷所有,转载需说明来源