2026 年最新 JavaScript 和 TypeScript 面试问题汇总,并附有详细答案。帮助前端开发人员自信地通过技术面试。
什么是虚拟 DOM? React 使用什么算法来区分渲染?
当输入快速搜索导致混合结果时,如何处理? (竞争条件)
如何缓存搜索结果以免重新获取?
类型和接口
通用之间有什么区别?
部分、必需、...等映射类型如何工作?工作吗?
TypeScript 中的限制点枚举机制
事件循环如何工作? 微任务与宏任务?
什么是闭包? 给出闭包导致错误或内存问题的真实示例。 JavaScript 中的
this是如何工作的?箭头函数和常规函数有什么区别?原型和原型链? JavaScript 是基于原型的意味着什么?
深层复制与浅层复制 - 何时会导致生产错误?
Debounce 与 Throttle - 不同,在什么情况下?
Promise 与 Async/Await - async/await 是否生成代码同步?
如何处理异步代码中的错误? (try/catch、.catch、全局处理程序)
未知与任何 - 使用哪一个以及为什么?
并集类型与交集类型 - 有什么区别?
从不它是什么? TypeScript 什么时候从不推断类型?keyof以及typeof的用途是什么?什么是类型缩小/类型保护?例如(
in、typeof、instanceof)。
查看更多:访谈Next.js 2026 Advanced 问题
经过最近的多次前端面试,我意识到一个非常明确的事实:
框架可以帮助你获得面试机会。
但是 JavaScript 和 TypeScript 才是决定你通过或失败的因素。
许多开发者学习 React、NextJS 很快,但缺乏 JavaScript 实际工作原理的基础。
这就是面试官想要测试的内容。
注意:这不是一个需要记住的列表。
下面的问题通常用于:
衡量知识深度
评估技术思维
开发人员级别分类
如果您掌握了这一部分,您已通过大部分回合技术。
1.什么是虚拟 DOM?比较算法?
DOM算法:
React 使用启发式 O(n) 而不是 O(n3)。
两个主要假设:
不同类型的元素 → 替换整个子树
使用
key来识别元素列表
2.搜索时的竞争条件
当先发送请求但稍后响应时发生。
最佳处理方法:
AbortController
const control = new AbortController();
fetch(url, { 信号:controller.signal });
控制器.abort();
跟踪请求 ID
仅在响应是最新请求时更新 UI。
React Query / SWR
此库对其进行预处理。
3.缓存搜索结果
目标:避免再次调用API。
常用方式:
Map / Object
const cache = new Map();
if(cache.has(query)) 返回cache.get(query);
库: React 查询、SWR → 自动缓存+重新验证。
高级:
LRU 缓存
TTL(时间过期)
4.类型 vs 接口轻松扩展
声明合并
适合对象/类
类型
并集、交集
更多灵活
5。什么是通用?
轻松扩展
声明合并
适合对象/类
并集、交集
更多灵活
允许您编写可重用代码,同时仍保持类型安全。
函数标识(value: T): T {
返回值;
}
高级用例:
API响应包装
存储库模式
自定义挂钩
关键字应为:
可重用+类型安全
6.映射类型
允许从旧类型创建新类型。
部分示例:
type Partial = {
[T 调中的 P]?: T[P];
};
常见:
部分→可选
必需→必需
只读
选择/省略
表明您了解类型转换。
7.枚举的局限性
创建运行时对象→增加bundle
tree-shaking困难
不灵活
现代趋势:
type Role = "admin" | “用户”;
更轻+更安全。
8.事件循环
JS 是单线程,但通过事件循环处理异步。
流程:
调用堆栈运行同步
异步 → Web API
回调 → 队列
事件循环推送堆栈
微任务优先于宏任务:
微任务:
Promise
queueMicrotask
宏任务:
setTimeout
setInterval
技巧: Promise 首先运行 setTimeout。
9.闭包
即使作用域已经结束,函数也会记住外部作用域。
function counter() {
让计数= 0;
返回()=> ++计数;
}
在以下情况下导致错误:
保留大引用→内存泄漏
使用
var循环
使用let修复。
10。这是如何工作的?
取决于函数的调用方式,而不是函数的编写位置。
快速规则:
方法 → this = object
箭头 → 不要绑定 this
call/apply/bind → set手动
11.原型链
JS 不是基于类的,而是基于原型。
访问属性时:
在对象中搜索
无→转到原型
直到
null
12.深复制与浅复制
浅复制:复制引用嵌套对象。
{...obj}
深度:
structuralClone(obj)
13. Debounce vs Throttle
Debounce:仅在用户停止输入后运行。
Throttle:按时间间隔限制运行次数。
搜索 → debounce
滚动 →throttle
14. Promise 与 Async/Await
Async/await 只是 Promise 的语法糖。
不会使代码同步 - 仍然是异步的。
优点:
易于阅读
尝试/捕获
15。异步处理错误
✔ try/catch
✔ .catch()
✔ 全局处理程序
16.未知与任何
任何:关闭类型检查
未知:使用前必须检查。
总是更喜欢未知。
17.并集 vs 交集
并集 (|) → 类型之一
交集 (&) → 必须全部
交集容易产生冲突。
18. never
值的类型从不发生。
例如:
函数抛出错误
无限循环
用于 switch 中的详尽检查。
19. keyof & typeof
keyof:获取对象的key为union类型。
type Keys = keyof User;
typeof:从变量获取类型。
在构建可重用类型时非常强大。
20。类型保护/缩小
帮助学生更具体地理解类型。
例如:
if(typeof value === "string") {
}
或者:
ininstanceof自定义防护
有一个非常清晰的模式:
如果你深入回答事件循环、闭包或泛型等主题,面试官几乎会立即增加难度 - 因为他们知道你不仅仅是在死记硬背。
如果你只有 3-5 天的时间准备面试
按优先顺序排列:
事件循环
闭包
这个
泛型
未知 vs任何
掌握这5个题目,你就超越了大多数考生。
分享








