You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:39:41