CommonJS和AMD本質上是用一個全局變量定義了一個命名空間this
以sea.js爲例,各個模塊輸出一個對象,而後這個對象掛載在seajs.cache屬性下,各個模塊做爲一個對象存在。spa
而ES6模塊則不是,模塊未被引用時,不會存在該模塊對象。對象
CommonJS和AMD是運行時加載,ES6模塊是編譯時加載編譯
這個區別能解釋上一個區別,這也是兩者區別最本質的根源。seajs
CommonJS和AMD要加載一個模塊必須先讓模塊執行(查看網路能看到加載對應的js文件),而ES6在編譯時就完成了加載。變量
this關鍵字的區別命名空間
ES6模塊中頂層this指向undefined;引用
CommonJS和AMD中頂層this指向模塊自己;命名