接下來再讓我們看兩個關于閉包的應用示例。首先是創(chuàng)建getter和setter。假設現(xiàn)在有一個變量,它所表示的是某類特定值,或某特定區(qū)間內的值。我們不想將該變量暴露給外部。因為那樣的話,其他部分的代碼就可以有直接修改它的可能,所以我們需要將它保護在相關函數(shù)的內部,然后提供兩個額外的函數(shù)——一個用于獲取變量值,一個用于給變量重新賦值。并在函數(shù)中引入某種驗證措施,以便在賦值之前給予變量一定的保護。另外,為了簡潔起見,我們對該類中的驗證部分進行了簡化;即這里只處理數(shù)字值。
我們需要將getter喝setter這兩種函數(shù)放在一個共同的函數(shù)中,并在該函數(shù)中定義secret變量,著使得兩個函數(shù)能夠共享同一個作用域,具體代碼如下:
var getValue, setValue;
(function
var secret = 0;
getValue = function () {
return secret;
};
setValue = function (v) {
if (typeof v === "number") {
secret = v;
}
}
} () );
在這里,所有一切都是通過一個即時函數(shù)來實現(xiàn)的,我們在其中定義了全局函數(shù)setValue()和getValue(),并以此來確定局部變量secret的不可直接訪問性。
getValue(); // 0
setValue(123) // 123
getValue() // 123
setValue(false);
getValue(); // 123