閉包是這樣一種機(jī)制: 函數(shù)嵌套函數(shù),內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和變量,參數(shù)和變量不會(huì)被垃圾回收機(jī)制所收回.
這里涉及到幾個(gè)概念:
1.函數(shù)嵌套函數(shù)
2.作用域(全局變量和局部變量)
3.變量的訪問規(guī)則
????垃圾回收機(jī)制(garbage collection)
????js內(nèi)部不斷掃描內(nèi)存,并清理無引用對(duì)象(自動(dòng)完成);
function aa(){
? ? ? ? var num=10;
? ? ? ? function bb(){
? ? ? ? ? ? num++
? ? ? ? ? ? console.log(num);
? ? ? ? }
? ? ? ? return bb;
? ? }
? ? //bb(); //無法直接訪問函數(shù)內(nèi)部的函數(shù)
? ? aa()();//11
? ? aa()();//11
? ? aa()();//11
? ? var closure = aa();
? ? closure();//11
? ? closure();//12
? ? closure();//13
閉包的好處
????????1.可以讓一個(gè)變量長(zhǎng)期駐扎在內(nèi)存當(dāng)中不被釋放
????????2.避免全局變量的污染, 和全局變量不同, 閉包中的變量無法被外部使用
????????3.私有成員的存在, 無法被外部調(diào)用, 只可以自己內(nèi)部使用
結(jié)論:
? ??????閉包是指有權(quán)訪問另一函數(shù)作用域中的變量的函數(shù)
????????閉包憨琳,可以訪問函數(shù)內(nèi)部的局部變量深员,并讓其長(zhǎng)期駐留內(nèi)存
????????由于閉包會(huì)攜帶包含它的作用域(運(yùn)行環(huán)境),因此會(huì)比其他函數(shù)占用更多內(nèi)存龄广,過度使用閉包? ? ? ? ? ? 可能會(huì)造成性能問題劫映。