变量和垃圾回收机制
变量分成两种类型的值,为基本数据类型和引用数据类型。
基本数据类型: number、null、undefined、string、symbol、bigint
引用数据类型:object
其中 symbol为es6新增,是一个原始数据类型,通过symbol函数生成
const title = Symbol();
const obj = {
[title]: '123'
}
BigInt
数据类型的目的是比Number
数据类型支持的范围更大的整数值,BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示
如果创建BigInt,需要在整数的末尾加上n,或者使用BigInt()构造函数。
console.log(1234567888888886); // 1234567888888886
console.log(1234567888888886n); // 1234567888888886n
let a = BigInt("1234567888888886"); // 1234567888888886n
基本类型值在内存中有固定大小的空间,所以是在栈中;当一变量对另一基本变量复制值时,是创建这个值的副本;
引用类型的值是对象,所以保存在堆中;当一变量对另一基本变量复制值时,复制的指针,因为两个变量最终都是指向同一对象;
js中有自动的垃圾回收机制,他的原理是找到不再继续使用的变量,然后释放其占用内存。
比如局部变量是跟随函数的执行而存在,当函数结束便没有存在的必要,此时就可回收占用的内存空间,所以它是一个周期性地操作。
垃圾回收方法;
- 标记清除:会给存储在内存中的变量都打上标记,然后将目前在环境中或在使用的变量再打上一个标记,剩下的就为准备回收的变量;
- 引用计数:跟踪记录每个值被引用的次数,当引用次数为0时,就会回收占用的内存空间。