AMD规范,异步模块定义。与CommonJS规范齐名并列。 作用都是利于JavaScript的模块化编程。

模块化编程的好处就是:

1、可重用

2、独立

3、能解决加载的依赖性问题

4、能解决重复加载问题

CommonJS是Mozilla 的工程师 Kevin Dangoor 在2009年1月创建的,当时的名字是 ServerJS,后来改名为 CommonJS,以显示其 API 的更广泛实用性。CommonJS是一套规范,创建和核准是开放的,已经有很多版本和具体实现。CommonJS 并不属于 ECMAScript TC39 小组的工作,但 TC39 中的一些成员参与了制定。

比较而言,CommonJS针对的是服务器和桌面等浏览器之外的环境,而AMD则是for浏览器。或者说,CommonJS同步,是服务器端的规范,而AMD异步,是客户端的规范

因为对服务器来说,所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于”假死”状态。

因此,AMD规范规定异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

不过,其实CommonJS也有浏览器端的实现,其原理是现将所有模块都定义好并通过 id 索引,这样就可以方便的在浏览器环境中解析了。

【CommonJS】

CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。require方法用于加载模块。

var x = 5;
var addX = function (value) {
return value + x;
};
module.exports.x = x;
module.exports.addX = addX;
var example = require('./example.js');
console.log(example.x); // 5
console.log(example.addX(1)); // 6

实现CommonJS的代表是node.js。

【AMD规范】

本规范只定义了一个函数 “define”,它是全局变量。函数的描述为:

define(id?, dependencies?, factory);
id:模块名称,字符串,可选
dependencies:依赖模块,数组,可选
factory:回调函数。此函数的参数要与依赖模块一一对应
  require(['math'], function (math) {
    math.add(2, 3);
  });

目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。至于CommonJS,主要是node.js吧。然而,2013年5月,Node.js 的包管理器 NPM 的作者 Isaac Z. Schlueter 说 CommonJS 已经过时,Node.js 的内核开发者已经废弃了该规范。

参考文章:

CommonJS 规范

AMD 规范

Javascript模块化编程(二):AMD规范

AMD (中文版)

最新文章

  1. VS2015 RTM与ASP.NET 5 RC1之坑
  2. Java中的Set集合接口实现插入对象不重复的原理
  3. Java-->IO流模拟实现用户登录以及登录信息
  4. MySQL复制应用中继日志解析
  5. linux VM命令下查找
  6. is not in the sudoers file.This incident will be reported
  7. Meth | apt-get update ,upgarde 和dist-upgrade 的区别
  8. 4_SSRF
  9. python socket单线程通信
  10. Hadoop安装-部署-测试
  11. WPF 语言格式化文本控件
  12. 【莫比乌斯反演】HDU1695_GCD
  13. 06 Listener,Filter,BeanUtils
  14. HDU3592(差分约束)
  15. sutdio中替换全局方法
  16. 【HTML5】使用 JavaScript 来获取电池状态(Battery Status API)
  17. @MarkFan 口语练习录音 20140401
  18. 4.centos7 docker 安装
  19. 浅谈 MVP in Android(转)
  20. Vue实现组件props双向绑定解决方案

热门文章

  1. 九度oj 题目1283:第一个只出现一次的字符
  2. 九度oj 题目1114:神奇的口袋
  3. Android刷新页面
  4. [SDOI2008]仪仗队 (欧拉函数)
  5. 页面中用Context.Handler传递
  6. 清除svn检出导致的所有文件的问号
  7. String源码分析(1)--哈希篇
  8. 一点点VIM
  9. 二叉树的层次遍历 II
  10. Ubuntu官方Wiki教程资源