js参数传值理解

参数传值

JavaScript中参数传值都是按值传递的,即函数外部的值复制给函数内部的参数,
对于基本类型的值就如同基本类型的变量复制一样,直接赋值;
引用类型值的传递如引用类型的变量复制一样,复制引用类型指针位置给参数;
按值传递&按引用传递
按指传递:传递的是值的拷贝,也就是说传递后就互不相关了;
按引用传递:传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。
基本类型传值实例:

function add(num) {
	num += 10;
	return num;
}
let count = 10;
let result = add(count);
console.log(count) // 10,无变化
console.log(result) // 20

基本类型参数传值很好理解,此处传入的count只是将值传给num,num获得值后就与count没有关系了;

引用类型参数传值实例

function setName(obj){
	obj.name = "CSDN";
}
let person = {};
let result = setName(person);
console.log(person.name) // CSDN

以上代码创建了一个对象将其保存在person中,然后变量被传递到setName()中后就将person指针复制给了obj,因此在函数内部objperson引用的是同一个变量,他们将访问同一个变量,因此函数内部修改obj外部会有反应。
这里有歧义的是: 有些人会认为在局部作用域中修改的对象在全局作用域中能反映出来,因此引用类型的传值是按引用传值。在理解之前先了解一下什么是按引用传值。
那么请看一下下面的例子:

function setName(obj){
	obj.name = "按值传递";
	obj = {};
	obj.name = "按引用传递"
}
let person = {};
let result = setName(person);
console.log(person.name) // 按值传递

此处obj接收的person的指针位置,但是这个指针位置变量是以值的形式传递,所以在函数内部修改obj的值后(不包括修改obj对象属性的值),obj绑定的值就改变了,不再指向person。
如果是按引用传值,那么obj应该永远指向person的指针地址,那么最后应该输出”按引用传递“。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值