1.概念
数据结构
-
栈: 后进先出
-
堆:是完全二叉树(有最大堆和最小堆之分)
基本数据类型
栈存储
- string
- number
- boolean
- null
- undefined
- symbol
- bigInt
特点
- 确定大小
- 频繁使用
var a = 10
var b = "jason"
- 先压入 a=10 ,
- 再压入 b='jason'
闭包中的基本数据类型变量是保存在堆内存里的,
当函数执行完弹出调用栈后,返回一个内部函数的一个引用,
这时候函数的变量就会转移到堆上,因此内部函数依然能访问到上一层函数的变量。
复制
基本数据类型复制的是值,都是独立存储,不互相干扰。
var a = 10
var b = "jason"
var c = a
var d = b
引用数据类型
堆存储
除了基本类型以外的都是引用类型,如
- Object
- Array
- Function
数据特点
- 大小不固定
- 适合复杂内容,如对象
- 在栈中只记录引用地址
在代码执行的时候已经只会执行栈上面的数据,当遇到引用类型,会根据对应地址,去堆里面查找。
var obj = {name:"jason"} //引用地址
var array = [1,2,3] //引用地址
var a = 20; //值
var b = "jason" //值
复制
var obj = {name:"jason"} //引用地址
var array = [1,2,3] //引用地址
var obj2 = obj //引用地址
var array2 = array //引用地址