当前位置:首页 > IT技术 > Web编程 > 正文

js高级---内存溢出和内存泄漏
2021-09-13 10:36:04

内存溢出和内存泄漏

 

内存溢出:是一种程序运行时出现的错误;当程序运行时需要的内存超过了剩余的内存时,就会抛出内存溢出的错误。

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();  
  • 事件监听
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/

开通会员,享受整站包年服务立即开通 >