JavaScript中函數(shù)內(nèi)部如何創(chuàng)建新變量,使其作為全局變量的副本而非全局變量的引用?
在JavaScript中,如果你想在函數(shù)內(nèi)部創(chuàng)建一個(gè)新的變量,這個(gè)變量是原始數(shù)據(jù)類(lèi)型(如數(shù)字、字符串)的副本,而不是原始數(shù)據(jù)類(lèi)型的引用,你可以直接賦值。對(duì)于對(duì)象或數(shù)組這樣的復(fù)合數(shù)據(jù)類(lèi)型,如果你想復(fù)制它們的值而不是引用,你需要使用不同的方法,因?yàn)橹苯淤x值會(huì)使得新變量與原變量共享同一個(gè)引用。
對(duì)于原始數(shù)據(jù)類(lèi)型(如數(shù)字、字符串)
對(duì)于原始數(shù)據(jù)類(lèi)型,當(dāng)你將一個(gè)值賦給一個(gè)新變量時(shí),實(shí)際上是在創(chuàng)建這個(gè)值的副本。例如:
let originalNumber = 10;
function processNumber() {
let copiedNumber = originalNumber; // copiedNumber 是 originalNumber 的副本
copiedNumber += 5; // 修改 copiedNumber 不會(huì)影響 originalNumber
console.log(copiedNumber); // 輸出 15
console.log(originalNumber); // 輸出 10
}
processNumber();
對(duì)于對(duì)象或數(shù)組
對(duì)于對(duì)象或數(shù)組,如果你想復(fù)制它們的值(即創(chuàng)建一個(gè)新的對(duì)象或數(shù)組,其內(nèi)容與原對(duì)象或數(shù)組相同,但不是同一個(gè)引用),你可以使用以下方法之一:
方法1:使用展開(kāi)運(yùn)算符(Spread Operator)
方法2:使用Array.slice()方法或Object.assign()方法(對(duì)于對(duì)象)
對(duì)于對(duì)象:
let originalObject = {a: 1, b: 2};
function processObject() {
let copiedObject = {...originalObject}; // 使用展開(kāi)運(yùn)算符復(fù)制對(duì)象
copiedObject.a = 3; // 修改 copiedObject 不會(huì)影響 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() 方法復(fù)制對(duì)象
copiedObject.a = 3; // 修改 copiedObject 不會(huì)影響 originalObject
console.log(copiedObject); // 輸出 {a: 3, b: 2}
console.log(originalObject); // 輸出 {a: 1, b: 2}
}
processObject();