2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
你把外層變量retrun出去,變量在你的函數(shù)跑完就被回收了,如果用內(nèi)層函數(shù)中引用,則不會(huì)被回收,因?yàn)橐迷谀恰:昧?,舉個(gè)列子,有個(gè)數(shù)據(jù)量較大的一顆部門樹,這棵樹基本不會(huì)變的,這個(gè)時(shí)候我用個(gè)閉包引用起來,下次我去調(diào)用它還在, 直接拿內(nèi)存,多好,多開心,不用在請(qǐng)求后臺(tái),不用在計(jì)算。但是記得不用了清除下,防止內(nèi)存溢出。

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
閉包的優(yōu)點(diǎn)就是避免全局污染,缺點(diǎn)就是造成內(nèi)存泄漏,這兩者之間的取舍需要自己去權(quán)衡,沒有講非要用閉包
你講的把外層函數(shù)的方法和變量return出去,那么return到哪呢?不還是return到全局去了,既然這樣就在全局中聲明了大量的變量,可能造成全局污染,再者,又為什么return出去呢,你直接在全局定義不是更直接?
如果你想這么使用的話,可以聲明一個(gè)空對(duì)象let myData = Object.creat(null)
,然后把你的數(shù)據(jù)都存到這個(gè)myData中,存取都在這里,也能避免全局污染
- 2 回答
- 0 關(guān)注
- 300 瀏覽
添加回答
舉報(bào)