当我们打开一个页面时,系统会为其分配一定的内存空间,这里面就包括了JS的内存区,JS内存区又分为代码区和数据区,顾名思义就是存代码和数据的区域,例如写入 var a = 1,那么a就存在了代码区,数字1就存在了数据区
在数据区中,包括栈内存(Stack)和堆内存(Heap)
基本类型的数据就存在栈内存中,它们可以直接访问,是按照值进行分配的,可以直接操作栈内存空间的值
vara=1b=aconsole.log(a)// 1console.log(b)// 1b=2// 改变b的值对a没有影响console.log(a)// 1console.log(b)// 2
除过上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型
引用类型的值是按引用访问的,它的值保存在堆内存中,栈内存中保存的是它的地址,该地址与堆内存中的值相关联
vara={name:"percy"};varb;b=a;a.name="zyj";console.log(b.name);// zyjb.age=22;console.log(a.age);// 22varc={name:"zyj",age:22}
图解如下:
image.png
总结:
栈内存堆内存
存储基础数据类型存储引用数据类型
按值访问按引用访问
存储的值大小固定存储的值大小不定,可动态调整
由系统自动分配内存空间由程序员通过代码进行分配
主要用来执行程序主要用来存放对象
空间小,运行效率高空间大,但是运行效率相对较低
先进后出,后进先出无序存储,可根据引用直接获取
作者:季靖松
链接:https://www.jianshu.com/p/38bd1c7dfd88
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。