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

为何变量赋值后源变量更新,被赋值变量未同步改变?

为何变量首次赋值后,源变量更新时它仍保留初始值?

这和变量声明顺序无关,核心原因是JavaScript对基本数据类型(数字、字符串、布尔值等)采用值传递的赋值机制:给变量赋值时,会把源变量的当前值完整拷贝一份,存入新变量的独立内存空间,两个变量从此互不关联。

看你的第一个示例:

let num1 = 2;
num1 = 4;
let num2 = num1;
console.log(num1);  // 4
console.log(num2);  // 4

这里是先把num1的值更新为4,再将num1的当前值(4)拷贝给num2,所以num2自然等于4。

再看第二个示例:

let firstName = "David";
let lastName = firstName; // 此时拷贝的是"David"这个字符串值
firstName = "Henry"; // 仅修改了`firstName`指向的内容,和`lastName`的独立拷贝无关
console.log(firstName); // Henry
console.log(lastName);  // David

当执行let lastName = firstName时,lastName拿到的是firstName当时的具体值"David",后续修改firstName只是让它指向了新的字符串"Henry",不会影响lastName已经存储的那份拷贝。

如果想让两个变量关联更新,需要用引用类型(比如对象、数组),因为引用类型赋值时传递的是内存地址,修改地址指向的内容会影响所有引用它的变量。比如:

let user = { name: "David" };
let userAlias = user;
user.name = "Henry";
console.log(user.name); // Henry
console.log(userAlias.name); // Henry

内容的提问来源于stack exchange,提问作者Codewell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:31:12