论JS函数传参时:值传递与引用传递的区别

论JS函数传参时:值传递与引用传递的区别

JS中传参分为两种,一种是值传递,另一种引用传递,但其本质都是值传递。

值传递:值传递是单向传递,只由实参传给形参,而不能由形参传给实参。在内存中,实参与形参是不同的单元。以下图为例,a、b把数值传给x、y,虽然他们的数值一样,但他们不是同一个东西。这就跟人的名字一样,你可以叫某某某,他也可以叫某某某,但你们两个并不是同一个人。在操作之后,x与y的值发生交换,但当被调函数fn执行完之后,形参就会发生销毁,但对于主调函数a、b不会产生影响,所以最后输出123、456。
论JS函数传参时:值传递与引用传递的区别_第1张图片

引用传递:就是引用ID,就相当于内存中的编号、地址。以下图为例,arr有一块空间,但是它里面存的不是1和2,而1和2在另一个空间,arr里面存的是指向1和2所在空间的编号。1、2所在的空间是内存自己开辟的,就相当于一个房子,而arr的空间就相当于一把钥匙。引用传递与值传递最大的区别就是引用类型有两块空间,一块存的是引用ID的编号,另一块存的是真正的数值。
论JS函数传参时:值传递与引用传递的区别_第2张图片

值传递中操作的是两块空间,就相当于两个房子;而引用传递是操作的一块空间,就相当于两把钥匙一个房子,所以会发生交换。

总结:值传递与引用传递的区别:
1.对于数值类型数据,形参无法改变主调函数中实参的值。
2.对于引用类型,可以通过形参改变主调函数中实参的值。

你可能感兴趣的:(论JS函数传参时:值传递与引用传递的区别)