理解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中,基本数据类型是值传递,而对象类型是引用传递。这种传递方式有时被称为“按值传递对象的引用”。
JavaScript函数参数传递方式解析
208

被折叠的 条评论
为什么被折叠?



