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
相关产品推荐
相关产品推荐

