共同点:两者都是为了实现模块化编程而出现的。对于大型项目,参与人数多,代码逻辑复杂,是最适合使用模块化的思想来完成整个项目的。同时采用这种思想也很便于对整个项目进行管控。
区别:
CommonJS:
● 适用于服务器端,Node.js的执行环境就是采用CommonJS模式
● 同步加载不同模块文件。之所以采用同步加载方式,是因为模块文件都存放在服务器的各个硬盘上,实际的加载时间就是硬盘的文件读取时间
AMD,Asynchronous Module Definition,即异步模块定义
● 适用于浏览器端的一种模块加载方式
● AMD采用的是异步加载方式(js中最典型的异步例子就是ajax)
● 浏览器需要使用的js文件(第一次加载,忽略缓存)都存放在服务器端,从服务器端加载文件到浏览器是受网速等各种环境因素的影响的,如果采用同步加载方式,一旦js文件加载受阻,后续在排队等待执行的js语句将执行出错,会导致页面的‘假死’,用户无法使用一些交互。所以在浏览器端是无法使用CommonJS的模式的。
目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js
下面程序输出的结果,以及改进的方法
for( var i=0;i<3;i++ ){
setTimeout(function(){console.log(i)},0); //3次3
}