返回
深入浅出:JS 基础面试题解析 - 第二弹
前端
2023-10-01 01:58:52
深入浅出解析 JavaScript 基础面试题
欢迎来到 JavaScript 基础面试题解析系列的第二篇博文!在上一篇文章中,我们深入探讨了一些常见的面试题,并提供了详细的解释和代码示例。今天,我们将继续沿着这个思路,对更多 JavaScript 基础面试题进行深入浅出的解析,帮助你进一步巩固和提升自己的 JS 技能。
深拷贝与浅拷贝
什么是深拷贝和浅拷贝?
- 浅拷贝: 仅复制对象的引用,而不是对象本身。修改浅拷贝后的对象,原对象也会受到影响。
- 深拷贝: 复制对象本身及其所有属性和子属性。修改深拷贝后的对象,原对象不受影响。
如何实现深拷贝?
一种实现深拷贝的方法是使用递归。具体步骤如下:
- 对于原始类型(字符串、数字、布尔值),直接返回该值。
- 对于数组,创建一个新数组,并递归复制每个元素到新数组中。
- 对于对象,创建一个新对象,并递归复制每个属性及其值到新对象中。
代码示例:
function deepCopy(obj) {
if (typeof obj !== "object" || obj === null) {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(deepCopy);
}
const newObj = {};
for (const key in obj) {
newObj[key] = deepCopy(obj[key]);
}
return newObj;
}
事件循环
JavaScript 的事件循环机制是什么?
JavaScript 事件循环机制是一个循环,不断从事件队列中获取事件并发送到事件处理程序中执行。该机制包括三个阶段:
- 执行阶段: 执行同步代码。
- 任务队列阶段: 执行异步代码。
- 事件队列阶段: 执行来自浏览器或其他外部来源的事件。
代码示例:
// 同步代码
console.log("同步代码");
// 异步代码
setTimeout(() => {
console.log("异步代码");
}, 0);
// 事件
document.addEventListener("click", () => {
console.log("事件");
});
闭包
什么是闭包?
闭包是指可以访问其他函数内部变量的函数。换句话说,闭包可以访问其他函数作用域中的变量。
闭包的应用场景:
- 数据私有化
- 事件处理
- 函数柯里化
代码示例:
function createCounter() {
let count = 0;
return function() {
return count++;
};
}
const counter = createCounter();
console.log(counter()); // 0
console.log(counter()); // 1
总结
以上就是本篇博文中介绍的几个常见 JS 基础面试题。通过对这些面试题的解析,希望你对 JS 基础知识有更深入的理解。在下一篇文章中,我们将继续探讨更多 JS 基础面试题,敬请期待!
常见问题解答
- 深拷贝和浅拷贝有什么区别?
- JavaScript 事件循环机制如何工作?
- 什么是闭包?
- 闭包有什么应用场景?
- 如何实现深拷贝?