JavaScript中函数内部如何创建新变量,使其作为全局变量的副本而非全局变量的引用?
在JavaScript中,如果你想在函数内部创建一个新的变量,这个变量是原始数据类型(如数字、字符串)的副本,而不是原始数据类型的引用,你可以直接赋值。对于对象或数组这样的复合数据类型,如果你想复制它们的值而不是引用,你需要使用不同的方法,因为直接赋值会使得新变量与原变量共享同一个引用。
对于原始数据类型(如数字、字符串)
对于原始数据类型,当你将一个值赋给一个新变量时,实际上是在创建这个值的副本。例如:
let originalNumber = 10;
function processNumber() {
let copiedNumber = originalNumber; // copiedNumber 是 originalNumber 的副本
copiedNumber += 5; // 修改 copiedNumber 不会影响 originalNumber
console.log(copiedNumber); // 输出 15
console.log(originalNumber); // 输出 10
}
processNumber();
对于对象或数组
对于对象或数组,如果你想复制它们的值(即创建一个新的对象或数组,其内容与原对象或数组相同,但不是同一个引用),你可以使用以下方法之一:
方法1:使用展开运算符(Spread Operator)
方法2:使用Array.slice()
方法或Object.assign()
方法(对于对象)
对于对象:
let originalObject = {a: 1, b: 2};
function processObject() {
let copiedObject = {...originalObject}; // 使用展开运算符复制对象
copiedObject.a = 3; // 修改 copiedObject 不会影响 originalObject
console.log(copiedObject); // 输出 {a: 3, b: 2}
console.log(originalObject); // 输出 {a: 1, b: 2}
}
processObject();
或者使用Object.assign()
:
let originalObject = {a: 1, b: 2};
function processObject() {
let copiedObject = Object.assign({}, originalObject); // 使用 Object.assign() 方法复制对象
copiedObject.a = 3; // 修改 copiedObject 不会影响 originalObject
console.log(copiedObject); // 输出 {a: 3, b: 2}
console.log(originalObject); // 输出 {a: 1, b: 2}
}
processObject();