📜  javascript 按值传递 - Javascript (1)

📅  最后修改于: 2023-12-03 15:01:43.448000             🧑  作者: Mango

JavaScript 按值传递

JavaScript采用按值传递(pass-by-value)的方式传递参数,这意味着当将一个参数传递给一个函数时,实际上传递的是该参数的值,而不是参数本身。

原始类型

JavaScript中的原始类型包括数字、字符串、布尔值、null和undefined,当将这些类型作为参数传递时,传递的是它们的值:

function updateNumber(number) {
  number++;
}

let num = 10;
updateNumber(num);
console.log(num); // 10

function updateString(string) {
  string += " World";
}

let str = "Hello";
updateString(str);
console.log(str); // "Hello"

在这个例子中,numstr被传递到函数中,但函数只是对其值进行了修改,并没有修改它们本身。

对象类型

对象类型包括对象、数组和函数,它们在传递时也是按值传递。但是,与原始类型不同的是,它们的值实际上是对对象本身的引用(reference),因此在函数中可以修改对象的属性。

function updateArray(array) {
  array.push(4);
}

let arr = [1, 2, 3];
updateArray(arr);
console.log(arr); // [1, 2, 3, 4]

function updateObject(obj) {
  obj.value = true;
}

let obj = { key: "value" };
updateObject(obj);
console.log(obj); // { key: "value", value: true }

在这个例子中,arrobj被传递到函数中,函数可以修改它们的属性,因为它们引用的是同一个对象。

然而,如果在函数中重新为对象赋值,它只会影响函数内部,不会影响到函数外部。

function updateObject(obj) {
  obj = { newKey: "newValue" };
}

let obj = { key: "value" };
updateObject(obj);
console.log(obj); // { key: "value" }

在这个例子中,obj被传递到函数中,函数将其重新赋值为一个新对象,但是这个操作只在函数内部生效,并没有修改函数外部的obj

总结

JavaScript采用按值传递的方式传递参数,值包括原始类型和对象类型的引用。函数可以修改对象类型的属性,但如果重新为对象赋值,不会影响函数外部。