例如下面这段代码,函数 change
在执行时,声明了一个局部变量my_color
,然后等函数执行完毕以后,这个局部变量也没有作用了,所以这时垃圾回收机制就会将这个没用的的局部变量my_color
给清除掉。
let color = ‘red’
function change() {
let my_color = ‘blue’
color = ‘green’
}
change()
JavaScript中能实现这样的垃圾回收的功能的一共有两种方式: 标记清除
、引用计数
(1)标记清除
标记清除是JavaScript中最常用的垃圾回收方式。它的实现方式是这样的,当代码执行在一个环境中时,每声明一个变量,就会对该变量做一个标记,例如标记一个进入执行环境
;当代码执行进入另一个环境中时,也就是说要离开上一个环境,这时对上一个环境中的变量做一个标记,例如标记一个离开执行环境
,等到垃圾回收执行时,会根据标记来决定要清除哪些变量。
(2)引用计数
引用计数是一种不太常用的垃圾回收方式。顾名思义,就是针对值为引用类型数据的变量进行计数,那么我们先来看一下以下这个例子,来理解一下这个方式的实现方式
let color = [1, 2, 3]
function change() {
let new_color = [4, 5, 6]
color = new_color
}
change()
console.log(color) //返回 [4, 5, 6]
这个例子中的函数change
内部声明了一个变量new_color
,并将一个引用类型值赋值给它,同时又将变量new_color
赋值给了全局变量color
,那么这种情况下,这个局部变量new_color
就不会被当成垃圾回收了,因为此时的变量new_color
并不是一个无用的局部变量了,它被全局变量color
所引用了。
那么为什么变量new_color
不会被当成垃圾回收呢?其实引用计数的垃圾回收方式是这样的,当声明一个变量时,会给该变量设定一个值为0的引用次数,当该变量被别的变量所引用,就将引用次数+1,若取消了原本的引用,则引用次数-1,而垃圾回收机制就是判断一个变量的值的引用数是否为0,如果为0,就被当成无用变量给回收掉,如果不为0,则不对该变量做任何的处理。
有时我们需要手动管理一下内存的分配和清除,应该很好理解,如果有更大的内存空间,因为可以给更多的变量分配内存,就会提高代码运行的效率,增加线程中能够执行的代码语句的数量。
所以我们要确保占用更少的内存使得页面获得更好的性能,就可以只将需要用到的数据保存到变量中,一旦数据不再使用,我们可以通过给变量赋值null
来释放数据的引用,这种方法就叫做解除引用。这种方法大多数是用于全局变量,因为局部变量一般在离开环境以后就会被自动清除。
我们来改变一下上面这个例子,使得变量new_color
被引用完后,当成无用变量给清除掉
let color = [1, 2, 3]
function change() {
let new_color = [4, 5, 6]
color = new_color
}
change()
console.log(color) //返回 [4, 5, 6]
color = null
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
![](https://img-blog.csdnimg.cn/img_convert/91b92f84242b4a0bab8d9e377c1342b9.jpeg)
最后
由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙点赞+点击【学习资料】即可领取!
有需要的程序猿(媛)可以帮忙点赞+点击【学习资料】即可领取!
[外链图片转存中…(img-LWtqwbE0-1712928005249)]
[外链图片转存中…(img-p2Mk3Mju-1712928005249)]