什么是堆和栈?
堆和栈讲的是内存的分配和使用,与硬盘寄存器无关。
堆用来存储引用类型数据比如Object,Function,new开头的包装类型,这样说也不准确,因为它的指针引用存到栈中。
栈用来存储值类型的,比如Null,Number,String,Boolean,Symbole,Udefiend。
二者区别
栈内存是自动分配相对固定大小的内存空间,并由系统自动释放。方便操作和管理。
堆内存是动态分配内存,内存大小不一,也不会自动释放。方便开辟新的内存空间。
传值和传址
var arry = [1,2,3];
var arry1 = arry;//arry,arry1,[1,2,3]
var str = arry[0];
arry[0] = 0;//arry,arry1,[0,2,3]
console.log(str);//1
str = 100;//arry,arry1,[0,2,3]
因为arry[0]是值类型,所以当把arry[0]赋值给str时,实际上是把堆中arry[0]的值复制了一份到了栈中,由于栈内存和堆内存不是相同的一块空间,因此互不影响,所以arry[0]或者str值改变了都不会互相影响。
因为arry是一个引用类型,所以当把arry赋值给arry1时,程序会在栈中开辟一块空间,然后把arry存放到栈中的引用(指针)赋值给这块新的栈内存,所以,栈内存中此时有两块空间指向同一个堆内存,再加上对象进行操作时由于操作的是引用,arry和arry1两者有其一发生变化都会互相影响共同的堆内存块。
2022

被折叠的 条评论
为什么被折叠?



