js函数传参是按值传递还是按引用传递?

**

js函数传参是按值传递还是按引用传递?

**

摘要

首先,得知道什么是值传递和引用传递吧。先上概念,百度百科写到:

值传递:在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

引用传递:在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

结论

看完上面那个概念,老司机们应该已经得出结论:如果函数传递的是基本数据类型,那么就是值传递;如果函数传递是引用类型,那么就是引用传递。

值传递

来看看值传递的例子吧:

var a = 10
function add(num){
	num+=10
}
add(a)
console.log(a);//10

运行上面代码就知道啦,打印是10。执行add(a)的时候,会复制一份值给函数的arguments这伪数组,当然同时也是num这个命名参数。arguments[0] = num,函数内部对num进行了加操作,num = 20了。但是外部最后输出a时,仍然是10,说明a与函数内部的num互不干扰。因为是复制了内存中的一份值给num,所以内部对num的操作不影响全局变量a的值。如果传递参数的是string类型或者boolean类型,也是这么个结论:如果函数传递的是基本数据类型,那么就是值传递
不信你自己试试,代码就不上了

引用传递

先看看例子:

var obj={name:'jin'};
function change(o){
    o.name='mu';
}
change(obj);
console.log(obj.name)

运行上面代码就知道啦,打印是‘mu’。根据查找的资料了解到,函数里面只是把实际参数复制一份作为形参,但是根据这个打印结果就知道,复制是复制了,可是也只是一个浅复制,浅复制的话,只是复制了栈指向地址,那么你改变了形参,实参也跟着改变。
结论:如果函数传递是引用类型,那么就是引用传递。

**

结束语

**
小小码农,如果说的不对,请指教。
写这篇文章前,已经查阅了很多资料,各种百度,最后是先找百度百科里的值传递和引用传递概念,然后再靠查阅的资料和自己的理解写了这篇文章。如果你直接百度‘js函数传参是按值传递还是按引用传递?’,那你会像我一样(怎么他们把这概念说得这么不清,而且前面的一顿乱七八糟说的都没有结论,看完整篇文章还质疑了:他们说的可信吗)
如果对我的这个结论还有质疑,那先质疑百度百科给我的值传递和引用传递概念😄。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值