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

