## CommonJS,AMD,CMD区别
> commonjs是用在服务器端的,同步的,如nodejs
> amd, cmd是用在浏览器端的,异步的,如requirejs和seajs
> 其中,amd先提出,cmd是根据commonjs和amd基础上提出的。
## CommonJS
`CommonJS`是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比如在服务器和桌面环境中,`Node.JS`遵循`CommonJS`的规范
`CommonJS`规范是为了解决`JavaScript`的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过`module.exports`导出对外的变量或接口,通过`require()`来导入其他模块的输出到当前模块作用域中。
举例说明:
~~~
var clock = require('clock');
clock.start();
~~~
`CommonJS`是同步加载模块
## AMD((Asynchromous Module Definition)
基于`CommonJS`规范的`nodeJS`出来以后,服务端的模块概念已经形成,很自然地,大家就想要客户端模块。而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行。但是,由于一个重大的局限,使得`CommonJS`规范不适用于浏览器环境。如果将上面的代码运行在客户端浏览器,就会报错。
上面的`require`方法是同步的。这对服务器端不是一个问题,因为所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于"假死"状态。
因此,浏览器端的模块,不能采用"同步加载",只能采用"异步加载"。这就是`AMD`规范诞生的背景。
**CommonJS是主要为了JS在后端的表现制定的,他是不适合前端的,AMD出现了,它就主要为前端JS的表现制定规范。**
`AMD`是`Asynchronous Module Definition`的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
`AMD`也采用`require()`语句加载模块,但是不同于`CommonJS`,它要求两个参数:
~~~
require([module], callback);
require(['clock'],function(clock){
clock.start();
});
~~~
`requireJs`就是`AMD`规范的实现
## CMD
`CMD`(Common Module Definition), 是`seajs`推崇的规范,`CMD`则是依赖就近,用的时候再`require`。它写起来是这样的:
~~~
define(function(require, exports, module) {
var clock = require('clock');
clock.start();
});
~~~
`AMD`和`CMD`最大的区别是对依赖模块的执行时机处理不同,而不是加载的时机或者方式不同,二者皆为异步加载模块。
`AMD`依赖前置,`js`可以方便知道依赖模块是谁,立即加载;而`CMD`就近依赖,需要使用把模块变为字符串解析一遍才知道依赖了那些模块
- HTML & CSS
- 【01】CSS3有哪些新特性
- 【02】HTML5有哪些新特性
- 【03】link和import的区别
- 【04】清除浮动的方法有哪些?
- 【05】谈谈对BFC的理解
- 【06】如何去掉inline-block元素之间的间隙
- 【07】垂直水平居中的方法有几种?
- 【08】行内元素有哪些?块级元素有哪些?空(void)元素有哪些?
- 【09】less和sass的特点和区别
- 【10】css选择器有那些?CSS3新增了哪些
- 【11】rgba和opacity的透明何不同?
- 【12】box-sizing的属性和作用
- 【13】请列举5个html5/HTML5输入类型?并简要描述其用途?
- 【14】页面有哪三层构成是什么?作用是什么?
- 【15】margin-top父元素塌陷及解决办法
- 【16】手机端怎么适配?
- 【17】如何让英文小写转换为大写
- 【18】精灵图和base64 如何选择,或者字体图标什么时候使用?
- 【19】position定位有几种?有什么区别?哪几个是脱离文档流的?
- 【20】div固定宽度文字超出显示省略号的方法
- 【21】如何解决input和select的宽高不一致问题
- 【22】请书写css 万能浮动清除法
- 【23】HTML5里的video标签支持哪些视频格式?
- 【24】请书写透明度opacity的IE兼容写法
- 【25】如何解决div与内部img间隙问题
- 【26】input设置为readonly和disable有什么区别?
- 【27】谈谈对BFC的理解
- 【28】什么是外边距重叠?以及防止方法
- 【29】html常见兼容性问题
- 【30】Doctype的作用?严格模式与混杂模式的区别?
- 【31】display属性有哪些?
- 【32】CSS样式覆盖规则
- 【33】手机端怎么适配?
- 【34】opacity/visibility/display 隐藏对比
- 【35】JS中使用typeof能得到的哪些类型?
- JS基础
- 【01】ES6新特性有哪些?
- 【02】new操作符具体干了什么?
- 【03】谈谈你对原型链的理解
- 【04】DOM怎样添加、移除、移动、复制、创建和查找节点
- 【05】import和require的区别
- 【06】export与export default 的区别
- 【07】$(document).ready和window.onload的区别?
- 【08】判断数据类型的方法有哪些,有什么区别
- 【09】cookies、sessionStorage、localStrorage的区别?
- 【10】谈一下你对面向对象的理解?
- 【11】闭包是什么?有什么特性和优缺点?
- 【12】this一般的指向,以及如何改变指向
- 【13】同步和异步的区别?
- 【14】ajax的优点和缺点
- 【15】JS是单线程还是多线程?为什么?
- 【16】CommonJS,AMD,CMD区别
- 【17】简述ajax请求过程,以及注意事项。
- 【18】ajax请求的时候get 和post方式的区别
- 【19】控制台undefined和is not defined异常区别?
- 【20】正则验证,match()与test()函数的区别?
- 【21】数组的常用方法有那些?
- 【22】例举3种强制类型转换和2种隐式类型转换
- 【23】列举IE和标准下有哪些JS兼容性的写法
- 【24】请你谈谈cookie的弊端?
- 【25】window对象常用的属性和方法有那些
- 【26】函数声明和函数表达式的区别?
- 【27】怎么判断一个object是否是数组(array)?
- 【28】JS实现继承的6种方式
- 【29】什么是事件委派以及优缺点
- 【30】window对象常用的属性和方法有那些
- 【31】简述“==”与“===”的区别?
- 【32】javascript各类型在转换为boolean式的规则?
- 【33】Object.creat()和new对象有什么区别?
- 【34】Object.assign()函数的作用及用法
- 【35】Void(0)的作用是什么?
- 【36】JS 的基本类型 和 引用类型、数据类型、内置对象
- 【37】bind、call、apply的区别
- 【38】节流和防抖
- 【39】重绘和回流
- 【40】defer和async的区别
- 【41】var、let、const之间的区别
- 【42】说说你对作用域链的理解
- 【43】map与forEach的区别?
- 【44】日期和随机数
- VUE
- 【01】Vue的生命周期有哪些,第一次加载会触发哪些钩子函数
- 【02】Vue 为什么采用Virtual(虚拟) DOM?
- 【03】Vue导航守卫的钩子函数有哪些?
- 【04】Vue组件通信 父子、兄弟、非父子
- 【05】如何解决Vue 数组/对象更新 视图不更新的情况
- 【06】Vue编程式的导航跳转传参的方式有哪些?
- 【07】Vue实现数据双向绑定的原理是什么
- 【08】Vuex是什么?怎么使用?哪种功能场景使用它?
- 【09】Vue中的$.nextTick的理解
- 【10】vue的路由hash模式 和 history模式 区别
- 【11】v-if与v-show区别
- 【12】mvc和mvvm模式区别
- 【13】react和vue有哪些不同,说说你对这两个框架的看法
- 【14】<keep-alive></keep-alive>的作用是什么?
- 【15】v-for 为什么使用key?
- 【16】说出至少vue 5个常用指令?
- 【17】说出至少vue 3个常用事件修饰符?
- 【18】Vue中 watch computed的区别
- 【19】Vue实现数据双向绑定的原理
- 【20】Vue等单页面应用及其优缺点
- 微信小程序
- 【01】小程序的生命周期及其区别
- 【02】微信小程序主包和分包区别
- 【03】小程序解析富文本有哪些方式,以及区别
- 【04】简述小程序几种页面跳转方式的区别
- 【05】小程序的 wxss 和 css 有哪些不一样的地方?
- 【06】微信小程序与vue区别
- 【07】bindtap和catchtap的区别是什么
- 【08】小程序页面间有哪些传递数据的方法
- 【09】简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch()的区别
- 【10】微信小程序的优劣势?
- jQuery
- 【01】jQuery如何实现事件委托?
- web综合
- 【01】less和sass的特点和区别
- 【02】你如何优化自己的代码?
- 【03】Svn与Git的区别
- 【04】http请求方式有几种?分别是什么?
- 【05】一般情况下,端口号的取值范围是多少?
- 【06】浏览器缓存有哪些,通常缓存有哪几种
- 【07】请解释JSONP的工作原理,以及它为什么不是真正的AJAX
- 【08】对nodejs的理解?
- 【09】Node.js的优点和缺点
- 【10】线程与进程的区别是什么?
- 【11】什么是WEB标准?什么是W3C标准?
- 【12】浏览器是如何渲染页面的
- 【13】从输入url到显示页面,都经历了什么
- 【14】谈谈垃圾回收机制方式及内存管理
- 【15】http 和 https 有何区别?如何灵活使用?
- 【16】xml和json的区别
- 【17】如何防止XSS攻击?
- 【18】web页面重构怎么操作?
- 【19】你所了解的Web攻击技术
- 【20】简述http常见的状态码及含义
- 【21】webpack 和 gulp 的区别
- 【22】Git和SVN之间的区别
- 【23】MongoDB 与 MySQL的区别
- 【24】你所了解到的Web攻击技术
- 手写代码
- 【01】请计算一个对象的长度
- 【02】请手写冒泡排序
- 【03】请分别用ES5和ES6实现数组去重
- 【04】把一个div变成圆左边蓝色 右边绿色
- 【05】计算1-10000中出现的0 的次数
- 【06】写一个兼容的function,清除字符串前后的空格
- 【07】请对一个数组的数组从小到大进行排序
- 【08】以下代码输出什么[空函数返回值]
- 【09】下面代码输出什么?[各种类型拼接]
- 【10】看下面代码,给出输出结果[计时器]
- 【11】如何获取三个数中的最大值和最小值?
- 【12】求数组中的最大值
- 【13】求数组中的最小值
- 【14】获得每个月1号是星期几?
- 【15】将字符串转化为驼峰表示法
- 【16】以下代码的alert的值分别是多少?
- 逻辑题
- 【01】找出最重的球