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();