js---函数参数是值传递还是引用传递

JavaScript函数参数传递方式解析

理解1:都是值(基本/地址值)传递

理解2:可能是值传递,也可能是引用传递(地址值)

在JavaScript中,函数参数的传递方式取决于参数的类型:

值传递(Pass by Value):

对于基本数据类型(如number、string、boolean、null、undefined和symbol),函数参数是通过值传递的。这意味着在函数内部对参数的任何修改都不会影响外部变量的值

function modifyValue(value) {
  value = 10;
}
let a = 5;
modifyValue(a);
console.log(a); // 输出 5,a 的值没有改变

引用传递(Pass by Reference):

对于对象类型(包括数组、函数和其他非原始类型),函数参数是通过引用传递的。这意味着在函数内部对参数对象的属性或方法的修改将影响外部对象。

function modifyObject(obj) {
  obj.name = "Kimi";
}
let person = { name: "AI" };
modifyObject(person);
console.log(person.name); // 输出 "Kimi",person 对象被修改了

需要注意的是,即使是引用传递,传递的也是对象引用的副本,而不是对象本身。在函数内部修改对象引用(例如将参数设置为另一个对象)不会影响外部变量。

function modifyObject(obj) {
  obj = {name: "Kimi"};
}
let person = { name: "AI" };
modifyObject(person);
console.log(person.name); // 输出 "AI"

解构赋值和参数:

当使用解构赋值作为函数参数时,实际上是创建了参数的一个副本,因此对参数的修改不会影响到原始变量

function modifyArray([, , item]) {
  item = 10;
}
let myArray = [1, 2, 3];
modifyArray(myArray);
console.log(myArray); // 输出 [1, 2, 3],myArray 数组没有改变

总的来说,在JavaScript中,基本数据类型是值传递,而对象类型是引用传递。这种传递方式有时被称为“按值传递对象的引用”。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值