天天看點

CommonJs和ES6 module的差別是什麼呢?

CommonJS 是一種子產品規範,最初被應用于 Nodejs,成為 Nodejs 的子產品規範。

運作在浏覽器端的 JavaScript 由于也缺少類似的規範,在 ES6 出來之前,前端也實作了一套相同的子產品規範 (例如: AMD),用來對前端子產品進行管理。

自 ES6 起,引入了一套新的 ES6 Module 規範,在語言标準的層面上實作了子產品功能,而且實作得相當簡單,有望成為浏覽器和伺服器通用的子產品解決方案。但目前浏覽器對 ES6 Module 相容還不太好,我們平時在 Webpack 中使用的 export 和 import,會經過 Babel 轉換為 CommonJS 規範。在使用上的差别主要有:

  1. CommonJS 子產品輸出的是一個值的拷貝,ES6 子產品輸出的是值的引用。
  2. CommonJS 子產品是運作時加載,ES6 子產品是編譯時輸出接口。
  3. CommonJs 是單個值導出,ES6 Module可以導出多個
  4. CommonJs 是動态文法可以寫在判斷裡,ES6 Module 靜态文法隻能寫在頂層
  5. CommonJs 的 this 是目前子產品,ES6 Module的 this 是 undefined

作者:阿裡巴巴淘系技術

來源:知乎

繼續閱讀