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

JavaScript函数参数能否按引用传递number、string等原始类型值?

JavaScript原始类型函数参数传递问题解答

核心结论先明确

JavaScript语法层面不存在原始类型按引用传递的能力,所有参数传递统一为按值传递:

  • 传入原始类型时,函数拿到的是原始值的拷贝,函数内部修改参数不会影响外部变量
  • 传入引用类型时,函数拿到的是引用地址的拷贝,函数内部修改引用指向的内容会同步到外部变量

你关心的内存占用问题解答

你担心的大体积原始值传递会占双倍内存的情况,实际不会发生,JS引擎底层做了大量优化:

  • 字符串类型:JS中字符串天生不可变,所有主流JS引擎都实现了*字符串驻留(String Interning)*机制,相同内容的字符串在内存中仅会存储一份。参数传递时底层实际传递的是驻留字符串的指针,不会全量复制字符串内容,长文本传递不会产生双倍内存开销。
  • 数值类型:常规小整数会被引擎做专门的优化(比如V8引擎的Smi类型),本身内存占用极小,复制成本可以忽略不计。大数值(如BigInt、超大精度浮点数)同样遵循不可变设计,传递时底层仅传指针,只读场景下没有额外内存开销。

如何实现类似原始类型按引用传递的效果

如果你的场景需要函数内部修改原始值后同步到外部,可以将原始值封装到对象或数组这类引用类型中传递,示例代码如下:

// 封装为对象传递
function updateLargeValue(wrapper) {
  wrapper.str = "修改后的长文本内容";
  wrapper.score = 999999999999n;
}

const valueWrapper = {
  str: "原本的超长文本消息...",
  score: 100000000000n
};
updateLargeValue(valueWrapper);
// 外部的valueWrapper内容已经被同步修改
console.log(valueWrapper.str);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:24:03