2016-03-04 77 views
5

我正在探索ES6 module並試圖找出我們使用ES6模塊取代closure以及module pattern(MP)的額外優勢。使用ES6模塊而不是顯示模塊模式的額外優勢是什麼?

例如在ES6中的 util.js。在使用ES6閉合&模塊圖案

var util = (function(){ 
     function _abc(){ 
     console.log("abc") 
      // function body 
     }; 
    function _def(){ 
     // function body 
     } 

    return{   // each of the function will be exposed 
     abc:_abc, 
     def:_def 

} 
}(util ||{})) 

someFile.js

var util ={ 
     abc:function(){ 
     //function body 
    }, 
    def:function(){ 
     // function body 
    } 
    export default utils; // here export is exposing the entire object 
} 

util.js中

import {utils} from "path/to/file" 

在someFile.js具有閉合&模塊圖案

util.abc() // Will log "abc" 

另外我知道es6 module允許我們重命名imports & exportsexport { a as abc}

用封&模塊模式,我們可以給我們的任何return語句裏面喜歡就好回報{ a:_abc}

我想問一個名字:什麼額外的好處,我們可以使用,而不是關閉ES6模塊得到& MP.One我猜是減少代碼行數。

請原諒我,如果我錯過了任何根本區別

+0

雖然我瞭解您的文章的重點,但您現在提出的問題太寬泛,不適合SO。請[編輯]你的問題到更專注的地方。 –

+0

@基爾正確地說。無論如何我改變了它,即使我正在努力尋找合適的標題。希望它會匯聚到我的懷疑 – brk

+0

「我們可以通過使用es6模塊而不是關閉來獲得額外的好處」仍然過於寬泛恕我直言。你能專注於一個技術問題,而不是有這樣一個開放的問題嗎? –

回答

7

隨着var util = (function(){ bla bla bla }(util || {}));全局命名空間被污染,所以,一旦你使用import {utils} from "path/to/file",它會留在全局命名空間,即你會擁有window.util隨處可見,即使模塊已經完成工作並被其他模塊替換。現在考慮你有100多個模塊,並以相同的方式做,然後想象可憐的窗口變得多麼髒!

然而,如果ES6模塊或CommonJS的,甚至是採用了AMD,那麼

  1. 的全局命名空間不被污染。
  2. [ES6]您可以使用export default something導出默認值使用import from "path/to/file"
  3. [ES6]您可以從ES6模塊導出多個事,使用export["anotherthing"]

此外,我建議你閱讀本blog post