高级前端面试题及答案(最新版)
JavaScript 深入
1. 解释 Event Loop 机制,包括宏任务和微任务的区别
答案:
Event Loop 是 JavaScript 实现异步的核心机制,它由以下部分组成:
- 调用栈(Call Stack):同步代码的执行栈
- 任务队列(Task Queue):存放宏任务
- 微任务队列(Microtask Queue):存放微任务
执行顺序:
- 执行同步代码(属于第一个宏任务)
- 执行当前宏任务产生的所有微任务
- 执行下一个宏任务
- 循环…
区别:
| 宏任务(Macrotask) | 微任务(Microtask) | |
|---|---|---|
| 示例 | setTimeout, setInterval, I/O | Promise.then, MutationObserver |
| 执行时机 | Event Loop的每个循环执行一个 | 在每个宏任务结束后立即全部执行 |
| API | Run by host environment | Run by JS engine |
2. Proxy/Reflect API的高级应用场景
答案:
Proxy可以用于:
// 1. API请求拦截器
const apiHandler = {
get(target, prop) {
return async (...args) => {
console.log(`Calling ${
prop} with`, args);
return target[prop](...args).catch(err => {
//统一错误处理
sentry.captureException(err);
throw err;
});
};
}
};
//2.响应式数据实现(Vue3原理)
function reactive(obj) {
return new Proxy(obj, {
get(target, key) {
track(target, key); //依赖收集
return Reflect.get(...arguments);
},
set(target, key, value) {
trigger(target, key); //触发更新
return Reflect.set(...arguments);
}
});
}
Reflect的用途:
//1.替代Object上的方法,更函数式
const obj = {
foo: 'bar' };
Reflect.has(obj, 'foo'); //替代'foo' in obj
//2.与Proxy配合使用保持默认行为
const proxy = new Proxy(obj, {
get(target, prop) {
if(prop === 'secret') return undefined;
return Reflect.get(...arguments); //保持默认行为
}
});
React高级特性
###3.React Fiber架构原理
答案:
Fiber是React16引入的新协调引擎,核心改进:
-
可中断渲染:将渲染工作拆分为多个小单元(fiber节点),每个单元完成后检查剩余时间,没有时间则暂停并让出主线程。
-
双缓冲技术:维护两棵fiber树(Current和WorkInProgress),减少直接操作DOM的开销。
-
优先级调度:区分不同优先级的更新(如用户交互>数据获取)。
-
新的生命周期:划分render阶段(pre-commit phase)和commit阶段。
关键数据结构:
interface FiberNode {
tag: WorkTag; //组件类型(Function/Class/Host等)
key: string | null;
elementType: any;
stateNode: any; //对应的实例
//链表结构
return: FiberNode | null; //父节点
child: FiberNode | null; //第一个子节点
sibling: FiberNode | null; //兄弟节点
//更新相关
memoizedState: any; //hooks链表(Hook会挂载到这里)
//副作用标记(EffectTag)
flags: Flags;
}
###4.Hooks实现原理及自定义高级Hook示例
实现原理:
1.React通过维护一个"current dispatcher"变量来区分mount/update阶段。
2.Function组件首次渲染时创建hook链表并挂载到fiber.memoizedState上。
3.Hook对象结构:
type Hook = {
memoizedState: any, //当前状态值(useState)/effect对象(useEffect)
baseState: any,
baseQueue: Update<any>,
queue: UpdateQueue<any>, //待处理的更新队列
next: Hook | null //下一个hook(形成链表)

最低0.47元/天 解锁文章
3807

被折叠的 条评论
为什么被折叠?



