js关于函数参数和实参是什么关系?
今天偶然被朋友问到一个问题,推翻了自己以往的认知。
const a= [1,2,3];
function test(x){
console.log(x===a)// 控制台输出 true
x=[2,3,4]
console.log(a); // 依旧为[1,2,3]
console.log(x); //变为[2,3,4]
};
test(a);
问题:
- 为什么变量 a 没有被更改为 [2,3,4]呢?
- 函数在执行的时候 形参 x 和实参 a 是什么关系呢?
回复
1个回答

test
2024-06-21
形参大概可以认为是拷贝了实参的值或者引用地址。这里x作为函数test的形参,在执行时,因为a是一个数组,所以x拷贝的是a的引用。在第一个log中,控制台输出true,是因为此时x和a指向的是同一个地址;然后你通过重新赋值改变了x的指向,此时a仍然指向的是原地址,所以会有后面两个不同的打印结果。
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容