鍍金池/ 問答/HTML5  HTML/ js閉包問題

js閉包問題

請問一下閉包的存在意義。如果要使用外層函數(shù)的方法和變量的話,直接把外層函數(shù)的方法和變量return出去就行啊,為啥要return內(nèi)層函數(shù),再從內(nèi)層函數(shù)里引用呢?

回答
編輯回答
離觴

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

2018年6月3日 10:11
編輯回答
傻丟丟

閉包的優(yōu)點(diǎn)就是避免全局污染,缺點(diǎn)就是造成內(nèi)存泄漏,這兩者之間的取舍需要自己去權(quán)衡,沒有講非要用閉包

你講的把外層函數(shù)的方法和變量return出去,那么return到哪呢?不還是return到全局去了,既然這樣就在全局中聲明了大量的變量,可能造成全局污染,再者,又為什么return出去呢,你直接在全局定義不是更直接?

如果你想這么使用的話,可以聲明一個空對象let myData = Object.creat(null),然后把你的數(shù)據(jù)都存到這個myData中,存取都在這里,也能避免全局污染

2018年7月2日 23:48