跳至主要內容

变量存储方式

wzCoding大约 2 分钟JavaScript变量存储方式

变量存储方式

在JS或其他编程语言中,变量是组成一切的基础,我们通过操作各种各样的变量来实现各种逻辑,那么理解变量以及变量的存储方式可以让我们对JS的学习更加深入

是栈内存(stack)的简称,栈由系统自动分配并自动释放,栈的数据结构遵循先进后出(LIFO)的原则,栈的内存空间相对较小,速度较快,一般用于存放基本类型的数据

是堆内存(heap)的简称,堆由开发人员控制分配与释放,堆的数据结构是无序的,满足键值对(key:value)的存储方式,堆的内存空间不是固定的,速度较慢,一般用于存放引用类型的数据

基本类型

在 JS 中,基本类型包括:nullundefinedBooleanNumberStringBigIntSymbol,它们的值都存放于栈内存中

let a = 20;
let b = "aseds";
console.log(a) //20
console.log(b) //aseds

let c = a;
console.log(c) //20

c = "123a"
console.log(c) //123a
console.log(a) //20
stack
基本类型存储在栈中

基本类型的数据在创建或者复制时会在栈中开辟出新的内存空间,它们之间都是独立的,互不影响

引用类型

在 JS 中,ObjectArrayFunction 等类型的数据都是引用类型的数据,它们的值存储在堆中,通过在栈中的地址的引用来访问堆中对应的值

let obj1 = {name:"jack"};
let obj2 = {name:"mike"};
console.log(obj1) // {name:"jack"}
console.log(obj2) // {name:"mike"}

let obj3 = obj2;
console.log(obj3) // {name:"mike"}

obj3.name  = "white";
console.log(obj3) // {name:"white"}
console.log(obj2) // {name:"white"}
heap
引用类型存储在堆中

引用类型的数据创建时将值存储在堆中,将自己在堆中的地址保存在栈中,而在复制或者修改引用类型的数据时,实际修改的是堆中的值,栈中保存的地址并没有被修改