ES6模塊和CommonJS、AMD本質區別思考

CommonJS和AMD本質上是用一個全局變量定義了一個命名空間this

以sea.js爲例,各個模塊輸出一個對象,而後這個對象掛載在seajs.cache屬性下,各個模塊做爲一個對象存在。spa

而ES6模塊則不是,模塊未被引用時,不會存在該模塊對象。對象

CommonJS和AMD是運行時加載,ES6模塊是編譯時加載編譯

這個區別能解釋上一個區別,這也是兩者區別最本質的根源。seajs

CommonJS和AMD要加載一個模塊必須先讓模塊執行(查看網路能看到加載對應的js文件),而ES6在編譯時就完成了加載。變量

this關鍵字的區別命名空間

ES6模塊中頂層this指向undefined;引用

CommonJS和AMD中頂層this指向模塊自己;命名

相關文章
相關標籤/搜索