Lazy loaded image
技术分享
JS 堆栈
Words 352Read Time 1 min
2024-11-10
2025-5-5
type
status
date
slug
summary
tags
category
icon
password
AI 摘要
堆是堆内存的简称,栈是栈内存的简称。
堆是动态分配内存,内存大小不一,也不会自动释放。栈是自动分配相对固定大小的内存空间,并由系统自动释放.

JS的数据类型

  • 基本数据类型Undefined、Null、Boolean、String、Number、Symbol都是直接按值直接存在栈中,每种类型的数据占用的内存空间大小都是固定的,并且由系统自动分配自动释放
  • 引用数据类型Object,Array,Function这样的数据存在堆内存中,但是数据指针是存放在栈内存中的,当我们访问引用数据时,先从栈内存中获取指针,通过指针在堆内存中找到数据
以代码为例:
let arr_origin = [1,2,3,4,5]; let arr_copy = arr_origin; let arr2 = arr_origin[2];
如果执行下面代码:
arr_copy[1] = 'change1'; arr2 = ‘change2’
我们发现arr_origin中的下标是1的值变成可change1,但是下标是2的值并未变化。原因是:arr_copy是arr_origin栈指针的引用,并未开辟新的内存空间,但是arr2是在栈内存中独立存在,所以会产生上述结果。熟悉此原理,则数据的深浅拷贝就不难理解了!
上一篇
JavaScript 浅拷贝深拷贝之理解及应用场景
下一篇
vue-router有哪几种导航钩子( 导航守卫 )?