Commonjs規(guī)范
1.從node庫中引入模塊,var math=require('math');即可
2.從非node庫中引入模塊,var math=require('./math');即可
3.exports導出模塊,{}內(nèi)部寫方法
4.同步加載
AMD規(guī)范
1.用define方法定義模塊
2.require調(diào)用模塊
3.異步加載
ES6中模塊機制
1.標準使用import引入模塊
2.import放在文件最開始,編譯階段執(zhí)行的
3.import中不能含有表達式或者變量,無法實現(xiàn)動態(tài)加載,語法上條件加載無法實現(xiàn)
區(qū)別
CommonJS 模塊輸出的是一個值的拷貝,ES6 模塊輸出的是值的引用。
CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口
ES6 模塊的運行機制與 CommonJS 不一樣。JS 引擎對腳本靜態(tài)分析的時候,遇到模塊加載命令import,就會生成一個只讀引用。等到腳本真正執(zhí)行時,再根據(jù)這個只讀引用,到被加載的那個模塊里面去取值。換句話說,ES6 的import有點像 Unix 系統(tǒng)的“符號連接”,原始值變了,import加載的值也會跟著變。因此,ES6 模塊是動態(tài)引用,并且不會緩存值,模塊里面的變量綁定其所在的模塊。