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

理解JS对象传参机制及返回值:date对象传入函数修改疑问

结论

你代码里的函数确实会直接修改外部传入的原始date对象,不需要返回整个对象,新增的julian、j2000、b1950等属性都会直接同步到你最开始声明的$ns.constant.date上。


原理说明

这是JS的参数传递规则决定的,和其他部分语言的传参逻辑有差异:

  • JS中所有参数都是「按值传递」,但不同类型的值传递逻辑不同:
    • 数字、字符串、布尔值等原始类型传递的是值的拷贝,函数内修改参数不会影响外部变量
    • 对象、数组等引用类型传递的是「指向原对象内存地址的拷贝」——也就是说函数内的date参数和你外部的$ns.constant.date指向的是内存里完全相同的对象
  • 你代码里没有给date参数重新赋值(比如写date = {}这种操作),只是在修改该对象的属性,所以所有修改都会直接作用到原始对象上
  • 补充说明:哪怕你用const声明对象,比如const date = {},const仅限制你不能把date变量重新指向其他对象,修改、新增对象的属性是完全合法的,不会触发限制

简单验证示例

你可以跑这段小代码快速验证这个特性:

const myDate = { year: 2024, month: 5, day: 20 };

function calcJulian(date) {
  // 仅修改属性,不重新赋值date
  date.julian = 2460450.5;
  date.j2000 = 24.5;
  return date.julian;
}

// 调用函数,仅接收返回的julian值
const julianVal = calcJulian(myDate);

// 打印原对象,能看到新增的属性
console.log(myDate.j2000); // 输出 24.5
console.log(myDate.julian); // 输出 2460450.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:15:04