JS內存泄漏
1.意外的全局變量
全局變量的生命周期很長,直到頁面關閉,它都存活,所以全局變量上的內存一直都不會被回收
當全局變量使用不當,沒有及時回收(手動賦值null),或者拼寫錯誤等將某個變量掛載到全局變量時,也就發生了內存泄漏
2.遺忘的定時器 和 事件監聽
在組件內部掛載了定時器,事件(setTimeout,window.addEventListener() ,如果在組件銷毀時沒有主動清除,這個函數內部引用的變量或函數都不會被垃圾回收機制回收,如果回調函數內部引用的變量或函數都不會被垃圾回收機制回收,如果引用變量存儲了大量的數據,就白白占用了內存,造成大量內存泄漏
3.遺漏的DOM元素
DOM元素的生命周期正常是取決于是否掛載在DOM樹上,當從DOM樹上移除時,也就可以被銷毀回收了
但是如果某個DOM元素,在js中也持有它的引用時,那么它的生命周期就是由js和是否在DOM樹上兩者決定了,記得移除時,兩個地方都需要去清理才能正常回收
4.錯誤使用閉包
函數本身會持有它定義時所在的詞法環境,但是通常情況下,使用完函數后,該函數所申請的內存都會被回收了,但是當一個函數內在返回一個函數的時候,由于函數內部持有外部函數的詞法環境,而返回的函數又被其他生命周期的東西所持有,導致外部函數雖然執行完了,但內存無法被回收
所以,返回的函數,它的生命周期不宜過長,方便該閉包能夠及時被回收