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 模塊就是對象,輸入時必須查找對象屬性。es6

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

相關文章
相關標籤/搜索