JavaScript闭包实现模块化
function module() {
var something = "cool";
var another = [1, 2, 3];
function doSomething() {
alert( something );
}
function doAnother() {
alert( another.join( " ! " ) );
}
return {
doSomething: doSomething,
doAnother: doAnother
};
}
var foo = module();
foo.doSomething(); // cool
foo.doAnother(); // 1 ! 2 ! 3
这个模式在JavaScript 中被称为模块。我们仔细研究一下这些代码。
首先,module() 是一个函数,必须要通过调用它来创建一个模块实例。如果不执行外部函数,内部作用域和闭包都无法被创建。其次,module() 返回一个对象,这个返回的对象中含有对内部函数而不是内部数据变量的引用。我们保持内部数据变量是私有变量。可以将这个对象类型的返回值看作是模块的公共API,彼此之间是独立的,互不影响。这个对象类型的返回值最终被赋值给外部的变量foo,然后就可以通过它来访问API 中的属性方法。即这就是用JavaScript的闭包实现了模块化。