JavaScript中的堆与栈 、浅拷贝与深拷贝

150 阅读1分钟

堆栈

  • 堆:队列优先,先进先出,由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈

  • 栈:先进后出,动态分配的空间 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

  • JavaScript的数据类型分为两大种:

  1. 基本类型:Undefined、Null、Boolean、Number 和 String,这5中基本数据类型可以直接访问,他们是按照值进行分配的,存放在栈(stack)内存中的简单数据段,数据大小确定,内存空间大小可以分配。
  2. 引用类型:即存放在堆(heap)内存中的对象,变量实际保存的是一个指针,这个指针指向另一个位置。

可画出内存图: juejin.cn/post/687788…

浅拷贝与深拷贝

  • 浅拷贝:仅仅是复制了引用,彼此之间的操作会互相影响。
  • 深拷贝:在堆中重新分配内存,不同的地址,相同的值,互不影响。