📅  最后修改于: 2023-12-03 15:01:43.448000             🧑  作者: Mango
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"
在这个例子中,num
和str
被传递到函数中,但函数只是对其值进行了修改,并没有修改它们本身。
对象类型包括对象、数组和函数,它们在传递时也是按值传递。但是,与原始类型不同的是,它们的值实际上是对对象本身的引用(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 }
在这个例子中,arr
和obj
被传递到函数中,函数可以修改它们的属性,因为它们引用的是同一个对象。
然而,如果在函数中重新为对象赋值,它只会影响函数内部,不会影响到函数外部。
function updateObject(obj) {
obj = { newKey: "newValue" };
}
let obj = { key: "value" };
updateObject(obj);
console.log(obj); // { key: "value" }
在这个例子中,obj
被传递到函数中,函数将其重新赋值为一个新对象,但是这个操作只在函数内部生效,并没有修改函数外部的obj
。
JavaScript采用按值传递的方式传递参数,值包括原始类型和对象类型的引用。函数可以修改对象类型的属性,但如果重新为对象赋值,不会影响函数外部。