AMD / CMD / ES6 / CommonJS

一、AMD

????????????????AMD是requireJS推廣過程中對模塊定義的規(guī)范化輸出,(Asynchronous Module Definition)異步模塊定義,模塊的加載不影響它后面語句的執(zhí)行,所以依賴此模塊的語句,都得在回調(diào)函數(shù)中執(zhí)行。AMD采用require語句加載模塊,需要兩個參數(shù)

舉例:require(['math'],function(math){math.add(2,3)});

requireJS就是AMD規(guī)范,是依賴前置、異步定義的框架define([module],function(module){...})

關(guān)鍵字:依賴前置、異步、回調(diào)

二、CMD

? ? ? ? CMD是seaJS推廣過程中對模塊定義的規(guī)范化輸出,(Common Module Definition)通用模塊定義,在CMD規(guī)范中,一個文件就是一個模塊,用define定義模塊

舉例:define(require,export,module){}

CMD是依賴就近,在什么地方使用到插件就在什么地方require該插件,即用即返,這是一個同步的概念

三、CommonJS

? ? ? ? node.js的模塊系統(tǒng),就是參照CommonJS規(guī)范實現(xiàn)的。在CommonJS中,有一個全局性方法require(),用于加載模塊;在前端瀏覽器里面并不支持module.exports,通過node.js后端使用的,

? ??導出時都是值拷貝,就算導出的值變了,導入的值也不會改變,所以如果想更新值,必須重新導入一次,加載模塊是同步的。

? ??module.export跟exports的區(qū)別

? ??????module.exports 方法還可以單獨返回一個數(shù)據(jù)類型(String、Number、Object...),而 exports 只能返回一個 Object 對象

? ? ? ? 所有的 exports 對象最終都是通過 module.exports 傳遞執(zhí)行,因此可以更確切地說,exports 是給 module.exports 添加屬性和方法

四、ES6

? ??模塊化---export/import對模塊進行導出導入的

? ??采用靜態(tài)編譯,使得編譯時就能確定模塊的依賴關(guān)系,以及輸入和輸出的變量,不支持動態(tài)導入,采用實時綁定的方式,導入導出的值都指向同一個內(nèi)存地址,所以導入值會跟隨導出值變化。

五、export和export default的區(qū)別

? ?1、 export/import可以有多個,export default只有一個;

? ? 2、通過export方式導出,在導入時需要加{},export default不需要

? ? 3、export能導出變量/表達式,export default不可以

? ? 4、?export與export default均可用于導出常量/函數(shù)/文件/模塊等

六、module.export跟exports的區(qū)別(node commonJS規(guī)范)

? ? ? ? module.exports和exports指向同一個內(nèi)存地址、文件最終導出的是module.export的文件地址。如果擅自改動exports的指向,那exports導出的東西。import的時候是拿不到的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容