js 内存数据存储-堆与栈

79 阅读1分钟

1.概念

数据结构

  1. 栈: 后进先出 image.png

  2. 堆:是完全二叉树(有最大堆和最小堆之分) image.png

基本数据类型

栈存储

  • string
  • number
  • boolean
  • null
  • undefined
  • symbol
  • bigInt

特点

  • 确定大小
  • 频繁使用
var a = 10
var b = "jason"
  1. 先压入 a=10 ,
  2. 再压入 b='jason'

image.png

闭包中的基本数据类型变量是保存在堆内存里的,
当函数执行完弹出调用栈后,返回一个内部函数的一个引用,
这时候函数的变量就会转移到堆上,因此内部函数依然能访问到上一层函数的变量。

复制

基本数据类型复制的是值,都是独立存储,不互相干扰。

var a = 10
var b = "jason"

var c = a
var d = b

image.png

引用数据类型

堆存储

除了基本类型以外的都是引用类型,如

  • Object
  • Array
  • Function

数据特点

  • 大小不固定
  • 适合复杂内容,如对象
  • 在栈中只记录引用地址

在代码执行的时候已经只会执行栈上面的数据,当遇到引用类型,会根据对应地址,去堆里面查找。


var obj = {name:"jason"} //引用地址
var array = [1,2,3] //引用地址
var a = 20; //值
var b = "jason"  //值

image.png

复制

var obj = {name:"jason"} //引用地址
var array = [1,2,3] //引用地址

var obj2 = obj //引用地址 
var array2 = array //引用地址

image.png