前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS的变量在内存中是怎么表示的?

JS的变量在内存中是怎么表示的?

作者头像
用户2802329
发布2020-03-17 17:47:35
4.1K0
发布2020-03-17 17:47:35
举报
文章被收录于专栏:Android先生Android先生

之前我们在学习JS的数据类型的时候就已经知道了JavaScript中的变量是分成两种的,一种是基本数据类型,一种是引用数据类型;而在内存空间中,有两块地方用来存储这些变量,栈内存和堆内存。

基本数据类型

像数字,布尔,字符串等都是存放在栈内存中的,它们的值是固定大小的,通过按值访问,来看一下基本数据类型在内存中的表示:

基本数据类型

说到数据,还有一个就是复制值,当我们用另一个变量去复制当前声明的变量时,会发生什么情况呢?

基本数据类型

看到了吧,基本数据类型复制之后做修改是不会影响到原数据的,这是因为在栈中的数据发生复制行为时,系统会给新的变量分配一个新的值,栈中的数据都是相互独立的,互相不影响。

引用数据类型

引用数据类型通常是保存在堆内存中,它们的值大小不是固定的,引用类型有一个指向堆内存中对象的指针(访问地址,也称引用),这个指针是存在栈里面的,在JavaScript中是不允许直接访问堆中存储的对象的,所以当你在操作对象的时候,实际是操作对象的指针,来看看引用类型在内存中的表示:

引用数据类型

当我们使用引用数据进行复制的时候,再改变引用数据的值,我们看看会发生什么呢?

引用数据类型

我们可以看到,新复制的变量的修改会导致原数据的值也发生改变,这是因为我即使是在栈中为新变量分配了一个值,但是这个值在堆内存中的指向还是和原数据的指向是同一个,所以当你操作数据改变堆中变量的时候,原数据指向的值也就改变了,所以才会有对象的深拷贝这么一说了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT先森养成记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本数据类型
  • 引用数据类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档