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

为何NodeJS局部变量cfg调用get_qstr_filter后值被修改?

NodeJS中对象属性传入函数后被修改的原因分析
  • 核心原因是JavaScript对引用类型的传递机制:如果get_qstr返回的是对象、数组这类引用类型,cfg.url_qstr存储的不是具体值,而是指向内存中该对象的引用地址。当你把cfg.url_qstr传入get_qstr_filter时,函数接收的是同一个引用,对这个参数的属性做修改,本质上就是直接修改内存里的原对象,自然会导致cfg.url_qstr的初始值被改变。

  • 举个直观的代码示例:

function get_qstr() {
  return { page: 1, size: 10 }; // 返回对象(引用类型)
}

function get_qstr_filter(qstr) {
  qstr.page = 2; // 修改参数的属性,直接作用于原对象
}

function get_list() {
  const cfg = {
    url_qstr: get_qstr()
  };
  get_qstr_filter(cfg.url_qstr);
  console.log(cfg.url_qstr.page); // 输出2,原属性已被修改
}
  • 如果要保留cfg.url_qstr的初始状态,需要在传递前创建原对象的独立副本,比如用扩展运算符或Object.assign:
// 传递副本,原对象不受影响
get_qstr_filter({ ...cfg.url_qstr });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:20:42