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

为何无法通过该方式修改对象本身却能修改对象属性?

为什么无法在函数中替换原对象,但能修改对象属性?

你给出的代码执行后,console.log(obj.a)依然输出hello,核心原因是JavaScript的参数传递是按值传递——哪怕是对象类型,传递的也是引用的副本,而非引用本身。

具体拆解代码的执行流程:

  • 第一步:var obj = {a: "hello"}创建了一个对象,obj变量存储的是这个对象在内存中的引用地址。
  • 调用modify(obj)时,把obj里的引用地址复制了一份传给函数参数o,此时o和obj指向内存中同一个对象。
  • 但函数内的o = {a: "hello world"}是给参数o重新赋值了一个全新的对象引用,这时o就和外部的obj彻底断开了关联,它指向的是新创建的对象,自然不会影响原obj。

那为什么修改对象属性就能生效?如果把函数改成这样:

var obj = {
  a: "hello"
};

function modify(o) {
  o.a = "hello world";
}

modify(obj);
console.log(obj.a); // 输出 "hello world"

这时候是通过o的引用,直接修改了它指向的内存对象的属性——因为o和obj指向同一个对象,所以外部obj的属性也会同步变化。本质是操作了同一个对象的内容,而非给参数变量重新赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:40:26