在面试中,JavaScript 是一个重要的考点。以下是一些常见的 JavaScript 面试题,帮助您准备面试。

基础知识

  1. 什么是闭包

    • 闭包是函数和其周围状态(词法环境)的引用绑定在一起的组合。闭包可以访问并操作定义时所在作用域的变量。
  2. 如何实现一个深拷贝

    • 可以使用 JSON.parse(JSON.stringify(obj)) 或者递归遍历对象属性进行拷贝。

进阶知识

  1. 事件循环是什么

    • 事件循环是浏览器或 Node.js 中处理异步事件的一种机制。它允许程序在等待异步操作完成时继续执行其他任务。
  2. 如何实现一个 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);
  }
};

实战技巧

  1. 如何避免内存泄漏

    • 避免全局变量、定时器未正确清理、事件监听器未正确移除等。
  2. 如何优化代码性能

    • 使用缓存、减少 DOM 操作、使用虚拟 DOM 等。

更多关于 JavaScript 性能优化的内容,请查看本站相关教程

图片展示

下面是一张关于 JavaScript 闭包的图片:

JavaScript Closure

希望这些内容能帮助您更好地准备 JavaScript 面试。祝您面试顺利!