在面试中,JavaScript 是一个重要的考点。以下是一些常见的 JavaScript 面试题,帮助您准备面试。
基础知识
什么是闭包?
- 闭包是函数和其周围状态(词法环境)的引用绑定在一起的组合。闭包可以访问并操作定义时所在作用域的变量。
如何实现一个深拷贝?
- 可以使用 JSON.parse(JSON.stringify(obj)) 或者递归遍历对象属性进行拷贝。
进阶知识
事件循环是什么?
- 事件循环是浏览器或 Node.js 中处理异步事件的一种机制。它允许程序在等待异步操作完成时继续执行其他任务。
如何实现一个 Promise?
- Promise 是一个对象,它表示一个异步操作最终完成(或失败)的状态。以下是一个简单的 Promise 实现:
function MyPromise(executor) {
let self = this;
self.status = 'pending'; // 初始状态
self.value = undefined; // 最终完成时的值
self.reason = undefined; // 最终失败时的原因
self.onFulfilledCallbacks = []; // 成功时的回调函数队列
self.onRejectedCallbacks = []; // 失败时的回调函数队列
function resolve(value) {
if (self.status === 'pending') {
self.status = 'fulfilled';
self.value = value;
self.onFulfilledCallbacks.forEach(fn => fn());
}
}
function reject(reason) {
if (self.status === 'pending') {
self.status = 'rejected';
self.reason = reason;
self.onRejectedCallbacks.forEach(fn => fn());
}
}
try {
executor(resolve, reject);
} catch (e) {
reject(e);
}
}
MyPromise.prototype.then = function(onFulfilled, onRejected) {
if (this.status === 'fulfilled') {
onFulfilled(this.value);
} else if (this.status === 'rejected') {
onRejected(this.reason);
} else if (this.status === 'pending') {
this.onFulfilledCallbacks.push(onFulfilled);
this.onRejectedCallbacks.push(onRejected);
}
};
实战技巧
如何避免内存泄漏?
- 避免全局变量、定时器未正确清理、事件监听器未正确移除等。
如何优化代码性能?
- 使用缓存、减少 DOM 操作、使用虚拟 DOM 等。
更多关于 JavaScript 性能优化的内容,请查看本站相关教程。
图片展示
下面是一张关于 JavaScript 闭包的图片:
希望这些内容能帮助您更好地准备 JavaScript 面试。祝您面试顺利!