JS 参数传递

参数传递

  • 基本类型传值调用(值拷贝)
  • 引用类型传共享调用(指针拷贝)

1.关键点是函数传参时,传入的是实参的拷贝,而不是实参本身。所以,基本类型传递的是变量的值的拷贝,而引用类型传递对象的指针的拷贝,其指针也是变量的值。所以传共享调用也可以说是传值调用。

2.值拷贝后,对值修改,自然不会影响原值。指针拷贝后,与原指针指向的是同一个对象,如果函数内修改对象的属性,刚原对象属性自然也变,但如果直接对指针拷贝赋予新值,即修改它的指向,则不会影响到原指针指向的原对象。

示例:

function changeStuff(a, b, c) {
  a = a * 10;
  b.item = "changed";
// 对对象重新赋值
  c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num); // 10
console.log(obj1.item);  //changed
console.log(obj2.item);  //unchanged

可以看到,变量 a 的值就是 num 值的拷贝,变量 b c 分别是 obj1 obj2 的指针的拷贝。
函数的参数其实就是函数作用域内部的变量,函数执行完之后就会销毁。

变量 a 的值的改变,并不会影响变量 num。
而 b 因为和 obj1 是指向同一个对象,所以使用 b.item = "changed"; 修改对象的值,会造成 obj1 的值也随之改变。
由于是对 c 重新赋值了,所以修改 c 的对象的值,并不会影响到 obj2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值