js形参传值有两种方式,值传递和地址传递,分别对应(对象类型、数组类型)和其他基础数据类型
例1:基础数据类型传参
function swip(num1, num2) {
const temp = num1;
num1 = num2;
num2 = temp;
}
let num1 = 0;
let num2 = 1;
swip(num1, num2)
console.log("num1=", num1, "num2=", num2)
例2:对象数据类型传参
function swipObjNum(obj1, obj2) {
const temp = obj1.num;
obj1.num = obj2.num;
obj2.num = temp;
}
let obj1 = {
num: 0
}
let obj2 = {
num: 3
}
swipObjNum(obj1, obj2)
console.log("obj1.num=", obj1.num, "obj1.num=", obj2.num)
例3:数组数据类型传参
function swipArrNum(arr1, arr2) {
const temp = arr1[0];
arr1[0] = arr2[0];
arr2[0] = temp;
}
let arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
swipArrNum(arr1, arr2)
console.log("arr1[0]=", arr1[0], "arr2[0]=", arr2[0])
例4:字符串数据类型传参
function swipString(str1, str2) {
const temp = str1;
str1 = str2;
str2 = temp;
}
let str1 = "黄"
let str2 = "红"
swipString(str1, str2)
console.log("str1=", str1, "str2=", str2)
结论:
1.形参为基础数据类型的函数,是拷贝形式传值,因此函数内的操作并不会影响到原对象的值
2.形参为《对象类型、数组类型》的函数,传递的是原对象的内存地址,因此原对象的属性会被函数内的操作所修改