* 基本数据类型
* 引用数据类型
/**
* 赋值引用
*/
public copyCite() {
let obj = { name: "1" };
let copyObj = obj;
obj.name = "2";
console.log(copyObj.name);// 2
//由于对象之间的赋值是复制了地址,因此地址复制过去之后,原对象的内容发生改变,复制的对象的内容也随之改变
//稍有不慎就会引起对原对象的修改,污染了原本的数据
//* 函数普通参数的传递/
let num = 1;
let str = "str";
let bChange = false;
this.useBaseFunction(num, str, bChange);
console.log(num);//1
console.log(str);//str
console.log(bChange);//false
//* 函数普通参数的传递/
// 函数引用参数的传递///
let objUseSpecail = { name: "spe" };
let list = [1, 2, 3, 4];
this.useSpecialFunction(objUseSpecail, list);
console.log(objUseSpecail.name);//change
console.log(list.toString());//"1,2,3,4,99"
// 函数引用参数的传递///
//函数引用参数的传递并重新赋值//
let newObj = { name: "newObj" };
this.newSpecialFunction(newObj);
console.log(newObj.name);//change
//函数引用参数的传递并重新赋值//
}
/**
* 函数普通参数的传递
*
*/
public useBaseFunction(num: number, str: string, bChange: boolean) {
num = 10;
str = "new";
bChange = true;
//基本类型参数传递的时候.复制栈帧的拷贝动作,外部变量和形参是两个不同的地址,只是复制了对应的值
}
/**
* 函数引用参数的传递
*/
public useSpecialFunction(obj, list: number[]) {
obj.name = "change";
list.push(99);
//引用参数类型
//引用类型参数传递的时候,由于本身存储的值是地址,因此传递的过程中把地址传递到函数中,引用类型的参数内容地址的内容发生改变
//原有的值也因此被改变
}
/**
* 函数引用参数的传递并重新赋值
*/
public newSpecialFunction(obj) {
obj.name = "change";
obj = { name: "new" };
//同理,引用类型参数传递的时候,对象的内容发生改变;而此时对象整个被新的对象赋值了,此时,新的对象的地址发生了改变,但是不影响此前原有地址内容的变化.
}