當(dāng)前位置:首頁 > IT技術(shù) > Web編程 > 正文

js高級---內(nèi)存溢出和內(nèi)存泄漏
2021-09-13 10:36:04

內(nèi)存溢出和內(nèi)存泄漏

?

內(nèi)存溢出:是一種程序運(yùn)行時出現(xiàn)的錯誤;當(dāng)程序運(yùn)行時需要的內(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/

開通會員,享受整站包年服務(wù)立即開通 >