什么是垃圾回收机制?
垃圾回收机制(Garbage Collection)简称GC机制;核心思想:如何判断内存是否已经不再被使用,如果是就视为垃圾释放掉;不再用到的内存,没有及时释放,就叫内存泄漏;垃圾回收常用算法:引用计算法和标记清除法。内存的生命周期
JS环节中分配的内存,一般有如下生命周期:
1.内存分配:当我没声明变量、函数、对象的时候,系统会自动为他们分配内存。
2.内存使用:既读写内存,也就是使用变量、函数等。
3.内存回收:使用完毕,由垃圾回收自动回收不再使用的内存。
4.说明:1.全局变量一般不会回收(关闭页面回收);2.一般情况下局部变量的值,不用了,会被自动回收掉。
垃圾回收机制的核心思想就是:如何判断内存是否已经不再被使用,如果是就视为垃圾释放掉。
垃圾回收机制-引用计算法
什么是引用计算法?
IE采用的引用计算法,定义[内存不再使用]的标准很简单,就是看一个对象是否有指向它的引用。算法:
1.跟踪记录每个值被引用的次数。
2.如果这个值的被引用了一次,那么就记录次数1
3.多次引用会累加。
4.如果减少一个引用就减1.
5.如果引用次数是0,则释放内存。
垃圾回收机制-标记清除法
引用计数法的问题?
引用计算法:会出现循环引用的问题,因为他们的引用次数永远不会是0。这样的互相引用如果说很大量的存在就会导致大量的内存泄漏。
什么是标记清除法
当变量进入执行环境时,就标记这个变量“进入环境”,被标记为“进入环境”的变量是不能被回收的,因为他们正在被使用。当变量离开环境时,就会被标记为“离开环境”,被标记为“离开环境”的变量会被内存释放。标记清除算法分为两步:
第一步:标记。
第二步:清除。
闭包
以下写法就是闭包
1.函数嵌套,一个函数里面嵌套一个函数
2.里面的函数在访问外层函数定义的变量
什么是闭包
概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域简单理解:闭包 = 函数嵌套+里层函数访问外层函数的变量 断点调试查看闭包
闭包的作用
可以在函数外面访问函数内部定义的变量基本用法
闭包-应用场景
闭包应用
实现数据的私有化。比如,我们要做个统计函数调用次数,函数调用一次,就++
传统的做法
但是,这样count是个全局变量,很容易被修改 可以使用闭包来数据私有化
这样实现了数据私有,无法直接修改count