垃圾回收机制与闭包

本文介绍了JavaScript中的垃圾回收机制,包括标记清除和引用计数两种方式,并详细解释了闭包的概念及其在内存管理中的影响。闭包允许函数访问并操作外部作用域的变量,即使外部函数执行完毕,这些变量也不会被立即销毁。这种特性在函数式编程和内存管理中具有重要意义。
摘要由CSDN通过智能技术生成

垃圾回收机制

如果一个对象不再被引用,那么这个对象就会被垃圾回收机制回收;

如果两个对象互相引用,且不被第三个对象所引用,那么这两个互相引用的对象也会被回收。

(注:在闭包中,父函数被子函数引用,子函数又被外部函数的变量引用,这就是父函数不被回收的原因)

垃圾回收机制通常有两种方法:

1、标记清除

在一个函数中设置一个变量,就将这个变量标记为‘进入环境’,从逻辑上来说,永远不会释放进入环境所占得内存(因为只要执行流进入相应的环境,就会被用到)。而当变量离开环境时,就会被标记‘离开环境’;

垃圾回收机制就是在运行的时候  会给存储在内存中的所有变量都加上标记,然后,它会去掉处于在环境中的变量以及被环境中的变量引用的变量标记(闭包);在此之后 剩下的带有标记的变量都是被视为 准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。

2、引用计数

引用次数为0就表示 这个值不再被用到了,因为可以将这块内存释放


闭包

闭包就是有权限访问其他函数作用域的局部变量的一个函数

在js中,变量的作用域属于函数作用域,在函数执行后作用域就会被清除,内存叶随之被收回,但是 由于闭包是建立在一个函数内部的子函数,由于其可访问上级作用域的原因,即使上级函数执行完毕,作用域叶不会随之销毁,这是的子函数----也就是闭包,便拥有了访问上级作用域中变量的权限,即使上级函数执行完毕,作用域内的值也不会被销毁。

可以这样理解:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

变量不受外界影响原因:

形成了私有作用域,让私有变量存到内存中,保护私有变量,让他 不受外界影响(外层函数的调用结果是返回内层函数,即内层函数自治性或者外层函数作用域内设置返回值为内层函数,这个内存函数就形成闭包,调用外层函数的变量)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值