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

为何执行swap函数后cat.name输出为Wild?已为feline重新赋值新对象

JavaScript函数参数重新赋值为何不影响原对象

代码示例

var cat = { name: 'Athena' };

function swap(feline) {
  feline.name = 'Wild';
  feline = { name: 'Tabby' };
}

swap(cat);
console.log(cat.name); // 输出 "Wild"

疑问

执行上述代码后,console.log(cat.name)输出结果为"Wild",但明明在swap函数内为参数feline重新赋值了{name:'Tabby'},为什么原对象cat的name没有变成"Tabby"?

原因解析

这本质是JavaScript引用类型的参数传递规则导致的:

  • 当调用swap(cat)时,函数参数feline拿到的是指向cat对象内存地址的副本。此时feline和cat指向同一个内存中的对象,所以修改feline.name = 'Wild'会直接改变这个共享对象的属性,原cat自然能同步看到这个变化。
  • 当执行feline = { name: 'Tabby' }时,是给feline这个局部变量重新赋值了一个新对象的内存地址。这时候feline的指向和原cat已经完全无关,后续对feline的操作不会影响到原cat对象。

总结:修改参数的属性会影响原对象,但给参数重新赋值新对象,只是改变了参数自身的指向,和原对象彻底脱钩。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:41:11