JavaScript面试精讲(八)——请谈谈JS中常见的几种内存泄漏情况

本文详细介绍了JavaScript中的内存泄漏类型,包括意外的全局变量、定时器未清除、闭包以及console.log导致的问题,并提供了相应的解决方案。避免内存泄漏的关键在于减少全局变量使用,正确管理定时器,理解闭包影响,以及谨慎使用控制台日志。
摘要由CSDN通过智能技术生成

一.什么是内存泄漏

由于疏忽或错误造成程序未能释放不在使用的内存,如果不及时释放,会造成内存占比越来越高,对项目中的内存会造成很大的影响

二.常见的几种情况

1.意外的全局变量

如下代码:a没有定义类型,会默认全局变量,按理说执行完函数就应该对a进行销毁,但是以外的全局变量不会销毁

简单理解:无用的内存还在占用,得不到释放和归还,比较严重的时候,无用的内存还会增加,从而导致整个系统卡顿,甚至崩溃

 

function fun(){
  a=10
   console.log(a);
  
}
fun()
console.log(a);

还有一种情况用this 创建,此时this 指向window 也会造成意外全局变量

function fun(){
  this.a=10
   console.log(a);
  
}
fun()
console.log(a);

2.定时器

如下代码:两秒钟后输出这句话,导致定时器的回调函数及其内部依赖的变量都不能被回收,这样也会造成内存泄漏

var hellow='你是一个优秀的前端工程师'
setTimeout(()=>{
  console.log(hellow);
  
},2000)

解决办法:当不需要interval或者timeout的时候,调用clearInterval或者clearTimeout

 

var hellow='你是一个优秀的前端工程师'
 const time= setTimeout(()=>{
  console.log(hellow);
  clearTimeout(time)
  
},2000)

3.闭包

闭包可以维持函数内局部变量,使其得不到释放。

function fun(name){
  function  fun1(){
    console.log(name);
    
  }
  return fun1
}
var fn=fun('张三')
fn()
fn()
fn=null //进行释放

 4.console

控制台日志记录对总体内存内置文件的影响,也是个重大的问题,同时也是容易被忽略的。记录错误的对象,可以将大量的数据保留在内存中。传递给console.log的对象是不能被垃圾回收,所以没有去掉console.log可能会存在内存泄漏~~~~

总结:

怎样避免内存泄露

1)减少不必要的全局变量,或者生命周期较长的对象,及时对无用的数据进行垃圾回收;

2)注意程序逻辑,避免“死循环”之类的 ;

3)避免创建过多的对象 原则:不用了的东西要及时归还。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.指尖舞者

如果帮助到了你,请给点赞助支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值