手写 EventEmitter深度解析
EventEmitter 是发布订阅的教科书实现:on 存回调、emit 逐个调、off 精准删、once 一次自毁。 面试考 once 的 wrapper 技巧、emit 中 off 自己的遍历安全,以及与观察者模式的区别。
EventEmitter 是发布订阅的教科书实现:on 存回调、emit 逐个调、off 精准删、once 一次自毁。 面试考 once 的 wrapper 技巧、emit 中 off 自己的遍历安全,以及与观察者模式的区别。
从 IIFE 到 CJS、AMD、UMD 再到 ESM,每一代解决上一代最痛的点(封装、异步、写法、格式割裂、静态分析)。 面试讲清演进脉络,就能说明 import/export 为何是今天这个样子。
A 引 B、B 引 A 即循环依赖——CJS 给半截空对象,ESM 保证引用不丢但顶层值可能仍是 undefined。 面试借此考察对模块加载时序的深入理解。
ESM 与 CJS 是两套范式:静态结构支撑 Tree Shaking、Live Binding 让跨模块变更实时可见、浏览器原生支持零打包。 面试对比两者差异与循环依赖时的表现。
CommonJS 三要点:同步加载、模块缓存(同一文件只执行一次)、值拷贝导出(导出值不随模块内变化更新)。 理解这三点就能解释 Node 模块的几乎所有行为。
把嵌套数组拍平成一层,面试官不考 arr.flat(Infinity),而是考递归爆栈风险、栈实现为何要 reverse、Generator 惰性求值省内存。 手写三种实现展现你对数据结构与性能的把控。
Cookie 是面试必问的客户端存储与鉴权载体:讲清字段(SameSite、HttpOnly、Secure、Domain、Path)、会话保持原理与安全属性。 掌握后能说清 CSRF 防护与跨域携带 Cookie 的关键点。
面试常考浏览器存储全家桶:localStorage、sessionStorage、Cookie、IndexedDB 的容量、生命周期、同源与读写差异。 讲清各自适用场景与选型,能答出「什么时候用哪个」即可过关。
去重本质是'判断两个元素是否相等'——Set 最快但只适用基本类型与 NaN,对象数组需自定义比较。 面试常考 NaN 去重、引用类型去重与性能取舍。
数组遍历分过程式(for/for-of,可中断)与声明式(map/filter/reduce,不可中断)两派。 面试从返回值、能否中断、副作用三个维度考察方法选型,而非单纯会不会用。