閉包的定義
? ??閉包就是能夠讀取其他函數(shù)內部變量的函數(shù)
閉包的特性
? ? 封閉性:外界無法訪問閉包內部的數(shù)據(jù),如果在閉包內聲明變量,外界是無法訪問的,除非閉包主動向外界提供訪問接口;
????持久性:一般的函數(shù),調用完畢之后,系統(tǒng)自動注銷函數(shù),而對于閉包來說,在外部函數(shù)被調用之后,閉包結構依然保存在。
閉包的優(yōu)缺點
????缺點:由于閉包攜帶包含它函數(shù)的作用域,因此比其他函數(shù)占用的內存更多。
????優(yōu)點:減少創(chuàng)建全局變量 減少傳遞給函數(shù)的參數(shù)量 封閉性
閉包有如下應用特征:
? ????1.局部變量:在函數(shù)中定義有共享意義的局部變量(定義成全局變量會造成全局污染);
?????2.內嵌函數(shù):在函數(shù)中申明有內嵌函數(shù),內嵌函數(shù)對函數(shù)中的局部變量進行訪問;
?????3.外部使用:函數(shù)向外返回此內嵌函數(shù),外部可通過此內嵌函數(shù)持有并訪問申明在函數(shù)中的局部變量,而此變量在外部是通過其他路徑無法訪問的;
閉包的結構
? ? function a(){
? ? ? ? var value = 1; // 局部變量
? ? ? ? function b(){? //內嵌函數(shù)
? ? ? ? ? ? alert(value?);
????????}
? ? ? ? return b;? // 返回內嵌函數(shù)
????}
? ? var c = a();
? ? c(); // 外部使用
? ? 根據(jù)定義a函數(shù)里面的b函數(shù)叫閉包,但是要獲取到這個b函數(shù) 就必須在a函數(shù)里面返回b函數(shù)。
? ? 上面c函數(shù)指向的就是這個b函數(shù)。
? ? 調用c函數(shù)就可以彈出a函數(shù)里面的局部變量value的值。