我正在探索 ES6 module
并试图找出使用 ES6 模块而不是 closure
以及 module pattern
(国 session 员)。
例如 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,我们可以获得什么额外的好处。我猜一个是减少代码行数。
如果我遗漏了任何基本差异,请原谅
最佳答案
var util = (function(){ bla bla bla }(util || {}));
全局命名空间被污染了,所以一旦你使用了 import {utils } 从“路径/到/文件”
,它将保留在全局命名空间中,即你将在任何地方都有 window.util
,即使在模块完成它的工作并替换为一些其他模块。现在假设您有 100 个模块,并且以相同的方式进行操作,那么想象一下可怜的 window 会变得多么脏!
但是如果使用 ES6 Module 或 CommonJS 甚至 AMD,那么
- 全局命名空间未被污染。
- [ES6] 您可以使用
export default something
导出默认值以使用import from "path/to/file"
- [ES6] 您可以使用
export["anotherthing"]
从 ES6 模块导出多个内容
此外,我建议您阅读此 blog post .
关于javascript - 使用 ES6 模块而不是揭示模块模式的额外优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35793404/