內(nèi)存溢出和內(nèi)存泄漏
?
內(nèi)存溢出:是一種程序運行時出現(xiàn)的錯誤;當(dāng)程序運行時需要的內(nèi)存超過了剩余的內(nèi)存時,就會拋出內(nèi)存溢出的錯誤。
1
2
3
4
|
var ?obj = {} for ( let ?i = 0;i < 1000000;i++){ ???? obj[i] =? new ?Array(1000000) } |
個人理解:內(nèi)存溢出是最終結(jié)果,即使沒有編寫內(nèi)存泄露的代碼也有可能造成內(nèi)存溢出
內(nèi)存泄漏:占用的內(nèi)存沒有及時釋放,內(nèi)存泄漏積累多了就容易導(dǎo)致內(nèi)存溢出。
常見的內(nèi)存泄漏
- 意外的全局變量
1
2
3
4
5
6
7
8
9
|
function ?fn(){ ???? a = 10 ???? console.log(a)??? } fn() ?
for ( let ?i = 0;i < 10;i++){ window[i] = i } |
- 沒有及時清理的定時器
1
2
3
4
|
var ?timer = setInterval(() => { ?? console.log( '----' ) }, 1000) timer =? null ?//沒有及時清理的定時器 |
- 閉包
1
2
3
4
5
6
7
8
9
10
11
|
function ?fn1() { ?? var ?arr =? new ?Array[100000]; ?? function ?fn2() { ???? console.log(arr.length) ?? } ?? return ?fn2; } var ?f = fn1(); f(); ?
f =? null ?// 讓內(nèi)部函數(shù)成為垃圾對象,釋放閉包 |
- 事件綁定
1
2
3
4
5
6
7
8
9
10
|
function ?fn() { ???? var ?zjy = document.getElementById( 'zjy' ); ???? zjy.onclick =? function ?() { ???????? alert(zjy.innerHTML); ???? }; ?
???? zjy =? null ;??????? //解除引用,等待垃圾回收 ???? alert(zjy);??????? //null,說明已經(jīng)不存在了 } fn(); |
- 事件監(jiān)聽
1
2
3
4
5
6
|
function ?fn(){ ???? console.log( 'zjy' ) } let ?zjy = document.getElementById( 'zjy' ); zjy.addEventListener( 'click' ,fn) zjy.removeEventListener(fn) |
本文摘自 :https://www.cnblogs.com/