我正在探索ES6 module
并试图找出使用ES6模块而不是closure
以及module pattern
(MP)获得的额外优势。
例如 ES6中的util.js。
var util ={
abc:function(){
//function body
},
def:function(){
// function body
}
export default utils; // here export is exposing the entire object
}
util.js使用闭包&模块模式
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 ||{}))
ES6中的someFile.js
import {utils} from "path/to/file"
在someFile.js中有封闭&模块模式
util.abc() // Will log "abc"
我也知道es6 module
允许我们重命名imports & exports
与export { a as abc}
一样。
关闭&模块模式我们可以在return语句中给出一个我们喜欢的名称,如return { a:_abc}
我的问题:使用es6模块代替封闭和放大,我们可以获得多大的好处? MP.One我想是减少代码行。
如果我错过了任何基本的差异,请原谅我
答案 0 :(得分:7)
使用var util = (function(){ bla bla bla }(util || {}));
全局命名空间会受到污染,因此一旦使用了import {utils} from "path/to/file"
,它就会保留在全局命名空间中,即你在任何地方都会window.util
,即使在模块已完成它的工作并由其他模块替换。现在考虑你有100个模块,你以相同的方式做到这一点,然后想象可怜的窗口会变得多么脏!
然而,如果使用ES6模块或CommonJS甚至AMD,那么
export default something
导出默认值以使用import from "path/to/file"
export["anotherthing"]
此外,我建议您阅读此blog post。