带做网站,电子商务网站建设需要学什么软件,今天重庆新闻,网站制作与管理技术标准实训教程深拷贝与浅拷贝
深拷贝#xff08;Deep Copy#xff09;和浅拷贝#xff08;Shallow Copy#xff09;是在编程中常用的概念#xff0c;它们指的是复制对象或数组时的不同方式。让我们来详细解释它们#xff0c;并列举一些例子#xff1a;
浅拷贝#xff08;Shallow C…深拷贝与浅拷贝
深拷贝Deep Copy和浅拷贝Shallow Copy是在编程中常用的概念它们指的是复制对象或数组时的不同方式。让我们来详细解释它们并列举一些例子
浅拷贝Shallow Copy
在浅拷贝中只复制对象或数组的引用而不是对象或数组本身的内容。因此原始对象和复制后的对象共享相同的引用如果修改了复制后的对象那么原始对象也会受到影响。
示例
// 浅拷贝对象
const originalObj { name: John, age: 30 };
const copiedObj Object.assign({}, originalObj);// 修改复制后的对象
copiedObj.age 40;// 原始对象也受到了影响
console.log(originalObj.age); // 输出: 40深拷贝Deep Copy
在深拷贝中复制对象或数组的内容以及所有嵌套对象或数组的内容。这样原始对象和复制后的对象是完全独立的对复制后的对象的修改不会影响到原始对象。
示例
// 深拷贝对象
const originalObj { name: John, age: 30 };
const copiedObj JSON.parse(JSON.stringify(originalObj));// 修改复制后的对象
copiedObj.age 40;// 原始对象不受影响
console.log(originalObj.age); // 输出: 30深拷贝与浅拷贝的其他例子
浅拷贝 Object.assign()扩展运算符 {...obj}数组的 slice()、concat()深拷贝 递归复制对象或数组的每个属性JSON.parse(JSON.stringify(obj))不适用于包含函数、RegExp、Date等特殊类型的对象使用第三方库如 lodash 的 _.cloneDeep() 方法
总之浅拷贝只复制对象的第一层属性而深拷贝会递归复制对象的所有属性包括嵌套的对象或数组。在选择使用哪种拷贝方式时需要根据具体情况来决定。 嵌套回调
// 第一个异步操作
function asyncOperation1(callback) {setTimeout(function() {console.log(异步操作1完成);callback();}, 1000);
}// 第二个异步操作
function asyncOperation2(callback) {setTimeout(function() {console.log(异步操作2完成);callback();}, 500);
}// 嵌套回调函数
asyncOperation1(function() {console.log(开始执行嵌套回调);asyncOperation2(function() {console.log(嵌套回调执行完毕);});
});console.log(主线程继续执行);执行解释一步一步来 执行顺序解释 首先调用asyncOperation1函数它会启动一个定时器1秒后执行回调函数。紧接着调用asyncOperation2函数它会启动一个定时器0.5秒后执行回调函数。在异步操作1的回调函数中输出开始执行嵌套回调。在异步操作2的回调函数中输出嵌套回调执行完毕。最后输出主线程继续执行。 因为异步操作是非阻塞的所以在执行异步操作的同时主线程会继续往下执行。当异步操作完成后会调用相应的回调函数进行处理。在嵌套回调的情况下内层回调函数的执行必须等到外层回调函数执行完毕后才能执行。