內存溢出和內存泄漏
?
內存溢出:是一種程序運行時出現的錯誤;當程序運行時需要的內存超過了剩余的內存時,就會拋出內存溢出的錯誤。
1
2
3
4
|
var ?obj = {} for ( let ?i = 0;i < 1000000;i++){ ???? obj[i] =? new ?Array(1000000) } |
個人理解:內存溢出是最終結果,即使沒有編寫內存泄露的代碼也有可能造成內存溢出
內存泄漏:占用的內存沒有及時釋放,內存泄漏積累多了就容易導致內存溢出。
常見的內存泄漏
- 意外的全局變量
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 ?// 讓內部函數成為垃圾對象,釋放閉包 |
- 事件綁定
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,說明已經不存在了 } 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/