- 閉包最大的特點(diǎn)合是,就是它可以“記住”誕生的環(huán)境厨诸,比如f2記住了它誕生的環(huán)境f1,所以從f2可以得到f1的內(nèi)部變量蜜托。在本質(zhì)上抄囚,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁。
閉包的最大用處有兩個(gè)橄务,一個(gè)是可以讀取函數(shù)內(nèi)部的變量怠苔,另一個(gè)就是讓這些變量始終保持在內(nèi)存中,即閉包可以使得它誕生環(huán)境一直存在仪糖。請(qǐng)看下面的例子,閉包使得內(nèi)部變量記住上一次調(diào)用時(shí)的運(yùn)算結(jié)果迫肖。
function createIncrementor(start) {
return function () {
return start++;
};
}
var inc = createIncrementor(5);
inc() // 5
inc() // 6
inc() // 7
- 閉包的另一個(gè)用處锅劝,是封裝對(duì)象的私有屬性和私有方法。
function Person(name) {
var _age;
function setAge(n) {
_age = n;
}
function getAge() {
return _age;
}
return {
name: name,
getAge: getAge,
setAge: setAge
};
}
var p1 = Person('張三');
p1.setAge(25);
p1.getAge() // 25
- 外層函數(shù)每次運(yùn)行蟆湖,都會(huì)生成一個(gè)新的閉包故爵,而這個(gè)閉包又會(huì)保留外層函數(shù)的內(nèi)部變量,所以內(nèi)存消耗很大隅津。因此不能濫用閉包诬垂,否則會(huì)造成網(wǎng)頁的性能問題。