JavaScript中变量内存分布问题(基本数据类型与引用数据类型的区别)

1、基本数据类型

// 创建一个变量n并且赋值为10 本质就是在栈区创建一个空间 将10这个值放到这个存储空间中
var n = 10;
// 创建一个k变量 并且赋值为n变量的值
// 赋值 编程语言中永远是将变量在栈区中存储的内容赋值给另外一个变量
var k = n;
// 将n变量栈区中的值修改为20
n = 20;
console.log(k);

2、引用数据类型

// 在栈区创建了arr这个变量,将数据存储到堆区中.
//堆区的数据存在一个内存地址 所以在栈区记录这个内存地址
var arr = [1, 2, 3];
// 创建arr2这个变量并且将arr在栈区的地址赋值给arr2这个变量 
//最终arr与arr2变量指向到堆区的同一份数据
var arr2 = arr;
// 修改arr2数组中1号元素值为200 
//本质是根据栈区的内存地址找到堆区将堆区的值修改为200
arr2[1] = 200;
// 因为arr 与arr2两个变量指向相同的空间 所以一个修改 另外一个也修改了
console.log(arr);

 3、修改代码

// 在栈区创建了arr这个变量,将数据存储到堆区中.
//堆区的数据存在一个内存地址 所以在栈区记录这个内存地址
var arr = [1, 2, 3];
// 创建arr2这个变量并且将arr在栈区的地址赋值给arr2这个变量
//最终arr与arr2变量指向到堆区的同一份数据
var arr2 = arr;
// 修改arr2数组中1号元素值为200 本质是根据栈区的内存地址找到堆区将堆区的值修改为200
// arr2[1] = 200;
// 因为arr 与arr2两个变量指向相同的空间 所以一个修改 另外一个也修改了
// console.log(arr);
arr2 = 200;
console.log(arr);

总结:

1、每一个变量都会在栈区中出现

2、变量直接直接赋值或者变量赋值(变量名称=) 永远是将自己栈区的值进行修改 如果赋值的是变量 永远将变量的栈区的值进行赋值

3、基本类型直接相互赋值 一个变量修改对另外一个变量 没有影响

4、引用类型相互赋值,如果直接赋值修改一个引用类型 另外一个变量不受影响 如果顺着内存地址修改数据 另外一个变量受到影响

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值