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

Node.js中如何实战实现函数参数的按引用传递

解决JavaScript中修改对象属性的参数传递问题

问题根源

JavaScript中所有参数传递都是按值传递:

  • 传递原始类型(字符串、数字、布尔等)时,传递的是值的副本,函数内修改参数不会影响外部变量。
  • 传递引用类型(对象、数组)时,传递的是对象引用的副本,但这个副本指向同一个对象,所以修改对象的属性会影响原对象,但直接给参数重新赋值新对象不会影响原对象。

你的原代码中,parseString(data.prop1)传递的是data.prop1的字符串副本,函数内修改prop只是修改副本,完全不会影响data.prop1;而{item: data.prop1}的装箱方式里,item存储的是字符串值的副本,修改item同样无法关联到原属性。

正确实现方案

方案1:传递对象+属性名,直接修改原对象属性

这是最直接的方式,利用对象的引用特性,在函数内直接操作原对象的属性:

let data = {
    prop1: '[1,2,3]',
    prop2: '{"abc":"def"}'
};

function parseString(obj, propName) {
    if (typeof obj[propName] === 'string') {
        obj[propName] = JSON.parse(obj[propName]);
    }
}

parseString(data, 'prop1');
parseString(data, 'prop2');
// 此时data.prop1是数组[1,2,3],data.prop2是对象{"abc":"def"}

方案2:返回解析结果,手动赋值给原属性

这种方式更直观,符合函数的纯逻辑设计,函数只负责处理值,外部自己完成赋值:

let data = {
    prop1: '[1,2,3]',
    prop2: '{"abc":"def"}'
};

function parseString(value) {
    return typeof value === 'string' ? JSON.parse(value) : value;
}

data.prop1 = parseString(data.prop1);
data.prop2 = parseString(data.prop2);

总结

JavaScript没有原生的“按引用传递原始值”的语法,要修改外部对象的属性,要么通过操作原对象的引用直接修改属性,要么通过函数返回处理后的值再手动赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:42:47