基础数据类型和引用数据类型赋值存储问题(面试常考题)

1、基础数据类型:(值存放在栈中)

var a = 1;
var b = a;
a = 2;
console.log(a,b)  //打印:2,1

结论:简单数据类型赋值时,传递的是真正的值。

解释:当我们声明一个变量a的时候, 会在栈里面开辟出一块新的内存空间, 用来存放这个变量a的数值, 当这个变量a存储的数值发生改变时, 栈空间里的对应那块内存里的数据也会发生改变, 此时如果又声明了一个变量b, 并把变量a赋值给变量b时, 在栈里面又会新开辟出一块空间, 用来存放变量b存储的数值, 而这个数值, 是变量a传递给他的, 因此, 此时两个变量分别对应两块内存空间, 存储的值是相同的, 因此, 当变量a发生改变时, 并不会影响到变量b所拥有的那块内存空间, 所以变量b是不会改变的

在这里插入图片描述
2、引用数据类型:(值存放在堆中,内存地址放在栈中)

let obj = {a: 1}
let obj2 = obj;
obj2.a = 2;
console.log(obj) //打印:{a: 2}

结论:复杂数据类型赋值时,传递的是内存地址。

解释:首先会在栈上的变量中存储指向数据的内存地址,然后会在堆内存中开辟一块空间,将数据存放在里面。一旦堆内存中的数据发生改变,因为复杂数据类型传递的是内存地址,所以内存地址就会指向那个改变的值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值