90% 前端面试必问的 12 个 JS 核心知识点
(2025–2026 年大厂真实高频考点,搞懂这些基本能过 80% 的 JS 考察环节)
以下 12 个点几乎是各大厂(字节、阿里、腾讯、美团、京东、快手、百度等)面试中最稳定、最常考的 JS 基础硬核部分。
顺序大致按照面试出现频率 + 考察深度排列。
1. 闭包(Closure)
必问形式:什么是闭包?闭包有什么用?内存泄漏怎么产生?怎么释放?
核心一句话:函数 + 它能访问到的词法作用域之外的变量 → 形成了闭包
最常考变体:
- 实现防抖/节流
- 实现私有变量(模块模式)
- for 循环 setTimeout 经典题(var vs let)
- 闭包在 React useCallback / useMemo 中的体现
2. this 指向 + 箭头函数
必问形式:输出以下代码的 this 指向?call/apply/bind 区别?箭头函数 this 怎么绑定的?
核心规律(2026 年仍最常考):
- 普通函数:谁调用 → 谁就是 this
- 箭头函数:定义时所在作用域的 this(永远不绑定)
- new 绑定 > 显式绑定(call/apply/bind) > 隐式绑定 > 默认绑定
- 严格模式下默认绑定 → undefined(非严格 → window/global)
3. 原型 & 原型链 & 继承
必问形式:proto 和 prototype 区别?如何实现继承?new 做了什么?
最常考实现:
- 寄生组合式继承(最优)
- ES6 class extends(底层还是寄生组合)
- Object.create() 实现继承
new 操作符四个步骤(必背):
- 创建空对象
- 设置原型(proto 指向构造函数.prototype)
- 执行构造函数(this 指向新对象)
- 返回对象(如果构造函数返回对象则返回它)
4. 事件循环(Event Loop) + 宏任务/微任务
必问形式:下面代码输出顺序?Promise.then、setTimeout、MutationObserver 谁先执行?
核心优先级(2026 年仍最稳):
- 同步代码
- 微任务队列(Promise.then、MutationObserver、queueMicrotask)
- 宏任务队列(setTimeout、setInterval、I/O、UI rendering)
经典题:Promise + setTimeout 嵌套、async/await + 微任务混合
5. 深浅拷贝
必问形式:什么是浅拷贝?怎么实现深拷贝?JSON.parse(JSON.stringify()) 的局限性?
常见实现方式(至少会两种):
- 浅拷贝:Object.assign / 展开运算符 / slice / concat
- 深拷贝:递归 + 循环引用处理(WeakMap 解决)
- 结构化克隆(structuredClone,浏览器新 API)
6. 作用域 & 作用域链 & 块级作用域
必问形式:var/let/const 区别?TDZ(暂时性死区)是什么?
核心对比:
| 声明方式 | 作用域 | 提升 | 重复声明 | TDZ | 全局属性 |
|---|---|---|---|---|---|
| var | 函数 | 是 | 允许 | 否 | 是 |
| let | 块级 | 否 | 不允许 | 是 | 否 |
| const | 块级 | 否 | 不允许 | 是 | 否 |
7. Promise / async-await / Generator
必问形式:手写 Promise.all / race / allSettled?async 函数返回值是什么?
高频手写:
- Promise.all(处理空数组、全部 reject)
- 实现 promisify(node 回调转 Promise)
- async/await + try-catch 错误处理
8. 垃圾回收 & 内存泄漏
必问形式:V8 垃圾回收机制?哪些情况会导致内存泄漏?
常见泄漏场景:
- 全局变量 / 未清理定时器
- 闭包引用大对象
- DOM 事件监听器未移除
- Map/Set 存 DOM 元素未清理
标记-清除 + 标记-整理 + 增量标记(V8 主流程)
9. 模块化(CommonJS vs ESM)
必问形式:require 和 import 区别?循环依赖怎么处理?
核心区别(2026 年仍考):
| 特性 | CommonJS (require) | ES Module (import) |
|---|---|---|
| 加载时机 | 运行时 | 编译时 |
| 是否异步 | 同步 | 异步(但静态分析) |
| 是否支持 tree-shaking | 否 | 是 |
| 导出方式 | module.exports / exports | export default / named |
10. 类型转换 & == vs === & 隐式转换
必问形式:[] == ![] 为什么是 true?console.log({} + {}) 输出什么?
ToPrimitive 规则 + 优先级:
- Number → String → 默认
- [] → “” → 0
- ![] → false → 0
- 对象 + 原始值 → 先 valueOf → toString
经典:[] == ![] → [] == false → 0 == 0 → true
11. 防抖 & 节流(Debounce & Throttle)
必问形式:手写防抖/节流?应用场景?
最常考场景:
- input 搜索(防抖)
- scroll / resize / mousemove(节流)
- button 重复点击(防抖)
12. ES6+ 高频新特性(实际开发 + 面试都爱考)
最常考 8 个(几乎必问):
- 解构赋值 + 默认值
- 模板字符串 + tagged template
- 展开/剩余运算符(…)
- 默认参数 + 参数尾默认
- let/const + 块级作用域
- 箭头函数
- Proxy / Reflect
- Symbol / BigInt / optional chaining(?.)
额外加分项(中高级常考):
- WeakMap / WeakSet 用法 + 垃圾回收关系
- Generator + async/await 底层
- Reflect.construct / Proxy 实现 new
- Module 的 import.meta
一句话总结:
这 12 个点搞懂 + 能手写 6–8 个经典实现(闭包防抖、Promise.all、深拷贝、继承、this 绑定、事件循环题),基本能应对 90% 的 JS 基础面试。
你现在最想针对哪 1–2 个点来深度拆解 + 手写代码 + 经典面试题?
(比如闭包 + 原型链 + 事件循环 + 深拷贝 这些组合题最杀)
告诉我,我继续陪你把它们彻底搞定~