commonJS模塊規范 和 es6模塊規范 區別


ES6 模塊與 CommonJS 模塊的差異

  1. CommonJS 模塊輸出的是一個值的拷貝,ES6 模塊輸出的是值的引用。
  2. CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口。
  3. CommonJS 加載的是一個對象(即module.exports屬性),該對象只有在腳本運行完才會生成。而 ES6 模塊不是對象,它的對外接口只是一種靜態定義,在代碼靜態解析階段就會生成。
  • 在 ES6 之前,社區制定了一些模塊加載方案,最主要的有 CommonJS 和 AMD 兩種。前者用於服務器,后者用於瀏覽器。ES6 在語言標准的層面上,實現了模塊功能,而且實現得相當簡單,完全可以取代 CommonJS 和 AMD 規范,成為瀏覽器和服務器通用的模塊解決方案。
    ES6 模塊的設計思想,是盡量的靜態化,使得編譯時就能確定模塊的依賴關系,以及輸入和輸出的變量。CommonJS 和 AMD 模塊,都只能在運行時確定這些東西。比如,CommonJS 模塊就是對象,輸入時必須查找對象屬性。

  • commonJS 和 es6模塊化 區別:
    es6 {
      export : '可以輸出多個,輸出方式為 {}' ,
      export default : ' 只能輸出一個 ,可以與export 同時輸出,但是不建議這么做',
      解析階段確定對外輸出的接口,解析階段生成接口,
      模塊不是對象,加載的不是對象,
      可以單獨加載其中的某個接口(方法),
      靜態分析,動態引用,輸出的是值的引用,值改變,引用也改變,即原來模塊中的值改變則該加載的值也改變,
      this 指向undefined
    }
    commonJS {
      module.exports = ... : '只能輸出一個,且后面的會覆蓋上面的' ,
      exports. ... : ' 可以輸出多個',
      運行階段確定接口,運行時才會加載模塊,
      模塊就是對象,加載的是該對象,
      加載的是整個模塊,即將所有的接口全部加載進來,
      輸出的是值的拷貝,即原來模塊中的值改變不會影響已經加載的該值,
      this 指向當前模塊
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM