JS 垃圾回收、内存泄露

JS 垃圾回收(GC)

C、C++ 等语言,开发人员需要手动跟踪内存使用情况,造成很多问题。

JS 实现了自动垃圾回收机制,执行环境负责管理内存,其垃圾收集器会周期性找到不再使用的变量,释放其内存。

最简单的情况是:函数中的局部变量,在函数执行结束后就没用了,可以释放

// 函数执行结束后,释放其作用域内的变量所占用内存
function fn1 () {
    const a = '11'
    console.log(a)
    const obj = { x: 100}
    console.log(obj)
}
fn1()

// 上面代码执行完毕后,fn1 里的 a 和 obj 变量都没用了,JS 引擎会回收,释放其内存

第二种情况是:全局变量,无论是在全局环境下定义的变量还是在函数里赋给window 的变量,因为后续可能还会用到,所以不会被释放

// 函数里的变量赋给 window,函数执行完后变量也不释放
// 注意:这没有问题,这是符合用户预期的,因为开发人员在定义全局变量的时候就是为了一直能用到它
function fn2() {
    const obj = { x: 100}
    window.obj = obj
}
fn2()

// 上面代码,因为 obj 赋给了 window,所以在 fn2 执行完后,obj 对应内存不会被回收

第三种情况是:闭包,闭包里的数据因为后续可能还会用到,所以函数执行完后不会被释放

// 闭包变量内存不释放
function getDataFns() {
  const data = {}
  return {
    get(key) {
      return data[key]
    },
    set(key, value){
      data[key] = value
    }
  }
}
const { get, set } = getDataFns()
set('x', 100)
get('x')

// 上面这种闭包的情况下,getDataFns 执行完后,data 也不会释放
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值