## 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】找出最重的球