在 JavaScript 中,函数可以传递对象。当对象作为参数传递给函数时,实际上传递的是对象的引用,而不是对象的副本。这意味着在函数内部对对象的修改会影响到函数外部的对象。
以下是关于 JavaScript 函数传递对象的一些基础概念:
JavaScript 中的对象(包括数组、函数等)是通过引用传递的。这意味着函数接收到的是对象在内存中的地址,而不是对象的副本。
function modifyObject(obj) {
obj.name = 'Modified Name';
}
let myObject = { name: 'Original Name' };
modifyObject(myObject);
console.log(myObject.name); // 输出: Modified Name
// 浅拷贝示例
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = { ...obj1 };
obj2.b.c = 3;
console.log(obj1.b.c); // 输出: 3
// 深拷贝示例
let obj3 = { a: 1, b: { c: 2 } };
let obj4 = JSON.parse(JSON.stringify(obj3));
obj4.b.c = 3;
console.log(obj3.b.c); // 输出: 2
以下是一个综合示例,展示了对象传递、浅拷贝和深拷贝的使用:
function modifyObject(obj) {
obj.name = 'Modified Name';
obj.details.age = 30;
}
let myObject = { name: 'Original Name', details: { age: 25 } };
console.log('Before modification:', myObject);
modifyObject(myObject);
console.log('After modification:', myObject);
// 使用浅拷贝避免修改原始对象
let shallowCopy = { ...myObject };
modifyObject(shallowCopy);
console.log('After shallow copy modification:', myObject);
// 使用深拷贝避免修改原始对象
let deepCopy = JSON.parse(JSON.stringify(myObject));
modifyObject(deepCopy);
console.log('After deep copy modification:', myObject);
通过以上内容,你应该对 JavaScript 中函数传递对象有了全面的了解。