1、堆和栈的概念
- 在JS钟变量都存放在内存中,而内存给变量开辟了两块区域,分别为
栈区域
和堆区域
- 栈(stack):是栈内存的简称,栈是自动分配相对固定大小的内存空间,并由系统自动释放,栈数据结构遵循FILO(first in last out)先进后出的原则
- 堆(heap):是堆内存的简称,堆是动态分配内存,内存大小不固定,也不会自动释放,堆数据结构是一种无序的树状结构,同时它还满足key-value键值对的存储方式;我们只用知道key名,就能通过key查找到对应的value。
2、数据类型
- 在JS中说到堆和栈就离不开普通数据类型和引用数据类型。
- 在JS中普通数据类型它是在栈内存在创建的,而引用数据类型则是在堆内存中创建的。
- 基本类型:采用的是值传递。
- 引用类型:则是地址传递。
3、腾讯面试题
第一题、
let a = 0;
let b = a;
b++;
alert(a);
结果:
"0" // 字符串0
执行分析:
- 在vo执行机制中采取三步走的形式:
1.1 创建变量
1.2 创建值
1.3 关联 - 由于上述代码是普通数据类型,所以是在栈中创建
- 代码分析:
let a = 0