扫码关注官方订阅号
javascript 引用类型的数据存放在堆内存,基本类型的数据存放在栈内存。我的疑问是,引用类型的数据最终也是由基本类型的数据组成的,那组成应用类型的这些基本类型的数据存放在堆内存还是栈内存?
人生最曼妙的风景,竟是内心的淡定与从容!
你这么理解是有误区的,你把两个概念揉在一起了。简单的说并不是引用类型就存在堆内存,基础类型就存在栈内存。这两个概念不能一概而论。
对于你所描述的,复合数据类型也是由基础类型组成的,那他们存在哪?这里并不是看他们是什么类型来决定他们存在哪,而是要看他们的声明方式来决定他们存在哪。
存储在栈内存中的,主要是根据程序逻辑明确需要申请的内存,也就是在编译或者解析代码时就能知道这块内存是必须申请的。而存储在堆内存中的,大多是动态申请的内存,也就是程序执行后才能知道这块内存是否需要申请的。
在Javascript中,复合数据类型都以对象的形式存在,而对象基本都是以new的方式申请内存的,所以基本上所有的复合数据都存储在堆内存中。注意,这里是指对象内的数据,而大部分的对象指针,也就是对象的引用,都是以栈内存的形式申请的。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
你这么理解是有误区的,你把两个概念揉在一起了。简单的说并不是引用类型就存在堆内存,基础类型就存在栈内存。这两个概念不能一概而论。
对于你所描述的,复合数据类型也是由基础类型组成的,那他们存在哪?这里并不是看他们是什么类型来决定他们存在哪,而是要看他们的声明方式来决定他们存在哪。
存储在栈内存中的,主要是根据程序逻辑明确需要申请的内存,也就是在编译或者解析代码时就能知道这块内存是必须申请的。
而存储在堆内存中的,大多是动态申请的内存,也就是程序执行后才能知道这块内存是否需要申请的。
在Javascript中,复合数据类型都以对象的形式存在,而对象基本都是以new的方式申请内存的,所以基本上所有的复合数据都存储在堆内存中。注意,这里是指对象内的数据,而大部分的对象指针,也就是对象的引用,都是以栈内存的形式申请的。