模块模式的关键在于对象字面量和闭包。
对象字面量封装模块,闭包实现私有和公有。它提供了一种包装混合公有/私有方法和变量的方式,防止其泄露至全局作用域。为我们提供了一个屏蔽处理底层事件逻辑的整洁解决方案,同时只暴露一个接口供其他部分使用。该模式的特点是返回一个对象而不是一个函数,除此之外非常类似一个立即调用的函数表达式。
由于闭包的存在,声明的变量和方法只在该模式内部可用。但在返回对象上定义的变量和方法,则是外部可见的。
var myNamespace=(function(){
// 私有计数器变量
var myPrivateVar=0
// 记录所有参数的私有函数
var myPrivateMethod=function(foo){
console.log(foo)
}
return {
// 公有变量
myPublicVar: "foo",
// 公有函数
myPublicFunction: function(bar){
myPrivateVar++
myPrivateMethod(bar)
}
}
})()
myNamespace.myPublicVar // "foo"
myNamespace.myPrivateVar // undefined:因为私有变量没有暴露在公有的API里