一、CommonJS 和 ES6 區(qū)別:
1.CommonJS 模塊是運(yùn)行時加載碘耳,ES6 模塊是編譯時輸出接口显设。
2.CommonJS 模塊的require()是同步加載模塊,ES6 模塊的import命令是異步加載辛辨,有一個獨立的模塊依賴的解析階段捕捂。
3.CommonJS是對模塊的淺拷?瑟枫,ES6 Module是對模塊的引?,即ES6 Module只存只讀,不能改變其值指攒,具體點就是指針指向不能變慷妙,類似const 。
4.import的接?是read-only(只讀狀態(tài))允悦,不能修改其變量值膝擂。 即不能修改其變量的指針指向,但可以改變變量內(nèi)部指針指向隙弛〖懿觯可以對commonJS對重新賦值(改變指針指向),但是對ES6 Module賦值會編譯報錯全闷。
二叉寂、共同點:
1.CommonJS和ES6 Module都可以對引?的對象進(jìn)?賦值,即對對象內(nèi)部屬性的值進(jìn)?改變室埋。
AMD办绝、CMD、CommonJs姚淆、ES6的對比
他們都是用于在模塊化定義中使用的孕蝉,AMD、CMD腌逢、CommonJs是ES5中提供的模塊化編程的方案降淮,import/export是ES6中定義新增的
什么是AMD、CMD搏讶、CommonJs佳鳖?
他們之間有什么區(qū)別?
項目當(dāng)中是如何使用媒惕?
1)AMD-異步模塊定義
AMD是RequireJS在推廣過程中對模塊定義的規(guī)范化產(chǎn)出系吩,它是一個概念,RequireJS是對這個概念的實現(xiàn)妒蔚,就好比JavaScript語言是對ECMAScript規(guī)范的實現(xiàn)穿挨。AMD是一個組織,RequireJS是在這個組織下自定義的一套腳本語言
RequireJS:是一個AMD框架肴盏,可以異步加載JS文件科盛,按照模塊加載方法,通過define()函數(shù)定義菜皂,第一個參數(shù)是一個數(shù)組贞绵,里面定義一些需要依賴的包,第二個參數(shù)是一個回調(diào)函數(shù)恍飘,通過變量來引用模塊里面的方法榨崩,最后通過return來輸出谴垫。
是一個依賴前置、異步定義的AMD框架(在參數(shù)里面引入js文件)蜡饵,在定義的同時如果需要用到別的模塊弹渔,在最前面定義好即在參數(shù)數(shù)組里面進(jìn)行引入,在回調(diào)里面加載
2)CMD---是SeaJS在推廣過程中對模塊定義的規(guī)范化產(chǎn)出溯祸,是一個同步模塊定義肢专,是SeaJS的一個標(biāo)準(zhǔn),SeaJS是CMD概念的一個實現(xiàn)焦辅,SeaJS是淘寶團(tuán)隊提供的一個模塊開發(fā)的js框架.
通過define()定義博杖,沒有依賴前置,通過require加載jQuery插件筷登,CMD是依賴就近剃根,在什么地方使用到插件就在什么地方require該插件,即用即返前方,這是一個同步的概念
3)CommonJS規(guī)范---是通過module.exports定義的狈醉,在前端瀏覽器里面并不支持module.exports,通過node.js后端使用的。Nodejs端是使用CommonJS規(guī)范的惠险,前端瀏覽器一般使用AMD苗傅、CMD、ES6等定義模塊化開發(fā)的
輸出方式有2種:默認(rèn)輸出---module export 和帶有名字的輸出---exports.area