接下来再让我们看两个关于闭包的应用示例。首先是创建getter和setter。假设现在有一个变量,它所表示的是某类特定值,或某特定区间内的值。我们不想将该变量暴露给外部。因为那样的话,其他部分的代码就可以有直接修改它的可能,所以我们需要将它保护在相关函数的内部,然后提供两个额外的函数——一个用于获取变量值,一个用于给变量重新赋值。并在函数中引入某种验证措施,以便在赋值之前给予变量一定的保护。另外,为了简洁起见,我们对该类中的验证部分进行了简化;即这里只处理数字值。
我们需要将getter喝setter这两种函数放在一个共同的函数中,并在该函数中定义secret变量,着使得两个函数能够共享同一个作用域,具体代码如下:
var getValue, setValue;
(function
var secret = 0;
getValue = function () {
return secret;
};
setValue = function (v) {
if (typeof v === "number") {
secret = v;
}
}
} () );
在这里,所有一切都是通过一个即时函数来实现的,我们在其中定义了全局函数setValue()和getValue(),并以此来确定局部变量secret的不可直接访问性。
getValue(); // 0
setValue(123) // 123
getValue() // 123
setValue(false);
getValue(); // 123