JavaScript变量为何无法自动更新?附代码示例疑问
为什么修改obj.speed后x的值还是20?
这其实是JavaScript里原始类型值的赋值机制在起作用,咱们一步一步拆解你的代码就清楚了:
先看你的代码:
var obj = { car: "volvo", speed: 20 }; var x = obj.speed; // 这是核心步骤! obj.speed = 500; console.log(x); // 输出20 console.log(obj.speed); // 输出500 obj.speed = 1000; var y = obj.speed; console.log(y); // 输出1000
关键原因:原始类型是按值拷贝赋值
JavaScript里的原始类型(数值、字符串、布尔值、null、undefined、Symbol、BigInt)在赋值时,是直接把当前值复制一份给新变量,而不是让新变量“关联”或“指向”原属性:
- 当你执行
var x = obj.speed时,obj.speed当时的数值是20,这个20会被完整复制到x的内存空间里,x和obj.speed从此就是两个完全独立的变量。 - 后续修改
obj.speed = 500,只是更新了obj对象中speed属性存储的值,完全不会影响x已经保存的那个20,所以console.log(x)自然输出20。
为什么调换顺序或y的情况就符合预期?
当你先修改obj.speed = 500,再执行var x = obj.speed时,这时候拷贝的就是修改后的500,x自然会拿到这个值;y的逻辑也是一样——先把obj.speed改成1000,再赋值给y,y拿到的就是最新的1000。
简单总结:原始类型赋值是“复制一份值”,不是“共享引用”,所以原变量/属性的后续修改不会影响已经赋值的新变量。
内容的提问来源于stack exchange,提问作者lovemyjob
相关产品推荐
相关产品推荐

