看下面的一个例子:
function doSomething(a) {
b = a + doSomethingElse( a * 2 );
console.log( b * 3 );
}
function doSomethingElse(a) {
return a - 1;
}
var b;
doSomething( 2 ) ; // 15
上述代码中的doSomethingElse实际上应该是doSomething的"私有"部分,根据最小暴露原则,应该将doSomethingElse放到doSomething的作用域内,避免其他的操作修改了doSomethingElse.代码如下:
function doSomething(a){
function doSomethingElse(a){
return a - 1;
}
b = a + doSomethingElse(a);
console.log(b * 3);
}
doSomething( 2 ); // 15
// 注:这样就只将必须的部分暴露给全局作用域.
// 更进一步:如果有多个属性和方法,将其全部挂在一个(独特)名字上面:
function MyPrivilegeScope() {
attr1: '1',
attr2: '2',
...
method1:function(){
//...
},
method2:function(){
//...
},
...
}
// 很像模块化编程..
参考《你不知道的JavaScript》(上卷) P24