js变量,作用域与内存问题(垃圾回收机制)
-
JavaScript变量可以用来保存两种类型的值: 基本类型值和引用类型值。基本类型的值源自一下5中基本数据类型:Undefined, Null, Boolean, Number, String。引用类型值指的是那些由多个值构成的对象(Object, Array, Date, RegExp, Function, 基本包装类型, 单体内置对象)。基本类型值和引用类型值具有以下特点:
-
所有变量(包括基本类型和引用类型类型)都存在于一个执行环境(也成为作用域)中,这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。以下是关于执行环境的几点总结:
-
JavaScript是一门具有自动垃圾收集机制的编程语言,开发人员不必关心内存分配和回收问题。以下是JavaScript的垃圾收集例程:
-
js垃圾收集机制的原理: 找出那些不再继续使用的变量, 然后是放弃占用的内存。为此,垃圾收集器会按照固定时间间隔(或者代码执行中预定的收集时间),周期性的执行这一操作
-
具体的两种方法
-
标记清除
- 垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记(任何标记方式都ok)
- 去掉环境中的变量和被环境中变量引用的变量的标记
- 垃圾收集器完成内存清除工作, 销毁他们的值并回收它们所占用的内存空间
-
引用计数
引用计数实际上就是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是 1。如果同一个值又被赋给了另一个变量,则该值的引用次数加 1。相反,如果包含这个值引用的变量又取得了另外一个值,则这个值的引用次数减 1, 当这个值的引用次数变成 0 时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾收集器再次运行时,它就会释放那些引用次数为 0 的值所占用的内存
-