堆内存和栈内存
堆内存的作用
:
存放引用数据类型
+ 对象: 存的是键值对
+ 函数: 存的是代码字符串
栈内存的作用
:
+ 供JS运行的环境
+ 存基本数据类型
引用数据类型和基本数据类型的区别
?
基本数据类型按值操作
引用数据类型按空间地址操作(引用地址)
存放在堆内存
中的对象,变量实际保存的是一个指针
,这个指针指向另一个位置。每个空间大小不一样,要根据情况开进行特定的分配。
当我们需要访问引用类型(如对象,数组,函数等)的值时,首先从栈
中获得该对象的地址指针,然后再从堆内存
中取得所需的数据。
基本数据类型和引用类型的区别:
基本数据类型是按值操作,引用数据类型是按空间地址(堆地址)操作
用例题方式理解堆内存和栈内存:
//例题1:
let ary1 = [3,4];
let ary2 = ary1;
ary2[0]=1;
ary2=[4,5];
ary2[1]=2;
ary1[1]=0;
console.log(ary1,ary2);//10 42
//例题2:
let obj = {
a:10,
b:obj.a*10
}
console.log(obj.b); //报错
// Uncaught ReferenceError: Cannot access ‘obj‘ before initialization
//原因: 因为先创建堆内存,也就是右边的值先创建,但是在创建的过程中(还未创建完成),所以obj还未在栈中创建,所以此时obj是undefined,所以会报错