JS的变量引用的坑

本文通过两个具体的JavaScript代码示例对比,详细解释了变量声明时的两种不同情况:一种是直接赋值,另一种是引用赋值。前者使得两个变量指向同一个内存地址,改变其中一个变量的值会影响另一个;后者则是在内存中为新变量开辟新的存储空间并复制值过去,二者地址不同,互不影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var a={p1:'a1'};
var b={p1:a.p1};
a.p2='b1';
b.p3='b3';
console.log(a);
console.log(b);
console.log(a==b);

var a={p1:'a1'};
var b=a;
a.p2='b1';
b.p3='b3';
console.log(a);
console.log(b);
console.log(a==b); 

以上两段代码的执行结果是不一样的!尽管看起来似乎是一样的。这里有个很重要的知识点,就是变量申明的时候是否是个独立的有内存空间的变量还是引用别人的变量的变量。这句话听起来有点绕口,下面给详细说明一下:首先把上面2段代码的结果截图给大家:


var a=b;

对于这种变量申明,其实就是把b的地址指给a,a和b共用一个地址,所以一个变了另一个也跟着变了。但如果var a={p:b.p}这种,就相当于在内存中给b也开了一个存储空间,并且把b的值复制过来给a了。尽管他们的值是一样的,但地址是不一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值