为何变量赋值后源变量更新,被赋值变量未同步改变?
为何变量首次赋值后,源变量更新时它仍保留初始值?
这和变量声明顺序无关,核心原因是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
相关产品推荐
相关产品推荐

