js关于函数参数和实参是什么关系?

作者站长头像
站长
· 阅读数 12

今天偶然被朋友问到一个问题,推翻了自己以往的认知。

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);

问题:

  1. 为什么变量 a 没有被更改为 [2,3,4]呢?
  2. 函数在执行的时候 形参 x 和实参 a 是什么关系呢?
回复
1个回答
avatar
test
2024-06-21

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

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