JavaScript 面试题
按难度分为基础、进阶、高级。每道题附参考答案与评分要点。
一、基础题
1. JavaScript 有哪些数据类型?如何区分原始类型和引用类型?基础
2. `==` 和 `===` 的区别?什么情况下推荐使用 `==`?基础
3. 什么是变量提升?`let`、`const`、`var` 的区别?基础
4. 解释一下闭包,并举一个实际应用场景。基础
5. 箭头函数和普通函数的区别?基础
6. 简述事件循环,宏任务和微任务有什么区别?基础
7. `Promise` 的三种状态是什么?`.then` 和 `.catch` 如何链式调用?基础
二、进阶题
8. 手写一个 `Promise.all`,并说明其特点。进阶
9. 如何理解 `this` 的绑定规则?优先级是怎样的?进阶
10. 原型链是什么?`__proto__`、`prototype`、`constructor` 的关系?进阶
11. ES6 模块与 CommonJS 模块有什么区别?进阶
12. 解释 `async/await` 的执行过程,下面代码输出什么?进阶
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() { console.log("async2"); }
console.log("script start");
async1();
console.log("script end");
13. 解释一下 JavaScript 的垃圾回收机制,常见内存泄漏有哪些?进阶
14. 什么是函数柯里化(Currying)?手写实现。进阶
三、高级题
15. V8 引擎是如何执行 JavaScript 的?解释 Ignition、TurboFan、隐藏类、内联缓存。深入
16. 设计一个支持取消的 Promise,并解释实现原理。深入
17. 如何实现一个响应式系统(类似 Vue3 的 reactive)?深入
18. 解释 JavaScript 的模块循环依赖问题,ESM 和 CommonJS 分别是如何处理的?深入
19. 解释一下 Proxy 和 Reflect,为什么 Vue3 选择 Proxy 而不是 Object.defineProperty?深入
20. 如何设计一个高可靠的前端埋点 SDK?从错误监控、性能采集、数据上报等角度分析。深入
21. 手写一个符合 Promise/A+ 规范的 Promise,关键点有哪些?深入
22. 什么是 Iterator / Iterable 协议?如何让一个对象支持 `for…of`?深入
23. 什么是 Error Cause?在实际项目中如何构建分层的错误处理体系?深入
面试准备建议
- 手写题:防抖、节流、深拷贝、Promise.all、new、bind/call/apply 必须能默写。
- 事件循环题:养成画队列的习惯。
- 原型链/this:准备关系图,能现场画出来。
- 工程化题:结合项目经验,准备具体案例。
领域编号:F01 JavaScript
最后更新:2026-06-24