一、CommonJS 和 ES6 區(qū)別:
1.CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口。
2.CommonJS 模塊的require()是同步加載模塊,ES6 模塊的import命令是異步加載,有一個獨立的模塊依賴的解析階段。
3.CommonJS是對模塊的淺拷?,ES6 Module是對模塊的引?,即ES6 Module只存只讀,不能改變其值,具體點就是指針指向不能變,類似const 。
4.import的接?是read-only(只讀狀態(tài)),不能修改其變量值。 即不能修改其變量的指針指向,但可以改變變量內(nèi)部指針指向??梢詫ommonJS對重新賦值(改變指針指向),但是對ES6 Module賦值會編譯報錯。
二、共同點:
1.CommonJS和ES6 Module都可以對引?的對象進?賦值,即對對象內(nèi)部屬性的值進?改變。
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ù)組里面進行引入,在回調(diào)里面加載
2)CMD---是SeaJS在推廣過程中對模塊定義的規(guī)范化產(chǎn)出,是一個同步模塊定義,是SeaJS的一個標(biāo)準(zhǔn),SeaJS是CMD概念的一個實現(xiàn),SeaJS是淘寶團隊提供的一個模塊開發(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