手写 EventEmitter
一句话概括 EventEmitter 是发布订阅模式的标准实现——用一个对象存事件名到回调数组的映射,on 订阅、emit 触发、off 移除、once 自动化清理。面试考的是你处理 once 的包装技巧和 emit 中途移除回调的边界情况。 核心知识点 1. 骨架 —— 事件名 → 回调数组 class EventEmitter { constructor() { th...
一句话概括 EventEmitter 是发布订阅模式的标准实现——用一个对象存事件名到回调数组的映射,on 订阅、emit 触发、off 移除、once 自动化清理。面试考的是你处理 once 的包装技巧和 emit 中途移除回调的边界情况。 核心知识点 1. 骨架 —— 事件名 → 回调数组 class EventEmitter { constructor() { th...
一句话概括 JS 模块化从全局变量大乱斗到 ESM 一统天下,经历了五次进化:IIFE(封装)、CommonJS(服务端)、AMD(异步)、UMD(兼容)、ES Module(语言级)——每次迭代都在解决前一代最致命的问题。 核心知识点 1. IIFE — 函数作用域模拟模块(2009) // 只有一个全局变量 MyLib,内部变量外部拿不到 const MyLib = (() =&...
一句话概括 A 引 B、B 引 A 就是循环依赖。CommonJS 给你半成品对象,ES Module 用 Live Binding 保住引用但值可能还没填——两者都不完美,但理解行为差异是写出可靠模块的基础。 核心知识点 1. CommonJS 的循环依赖 — 半成品地狱 // a.js console.log('a 开始'); exports.done = false; cons...
一句话概括 ES Module 是 JavaScript 语言层面的官方模块系统——静态结构支持 Tree Shaking、实时绑定解决循环依赖、异步加载原生跑在浏览器,三个特性加起来根本不是 CJS 的语法糖,而是换了赛道。 核心知识点 1. 语法全景 // ── 导出 ── export const PI = 3.14; export function add(a, b) { r...
一句话概括 CommonJS 是 Node.js 的默认模块系统,核心三件事:require() 同步加载、module.exports 导出值拷贝、模块首次执行后缓存——六个字记牢:同步、缓存、值拷贝。 核心知识点 1. 基础:导出与导入 // math.js —— 导出 const add = (a, b) => a + b; const SECRET = '外部不可见';...
一句话概括 数组扁平化就是把 [1, [2, [3, 4]]] 变成 [1, 2, 3, 4]。面试不考你知不知道 arr.flat(),考的是递归、栈、Generator 三种思路的取舍——以及什么时候递归会爆。 核心知识点 1. 递归实现 — 最直白 function flatten(arr) { const result = []; for (const item of...
一句话概括 Cookie 不是存数据的,是 HTTP 无状态协议的身份补丁——每次请求自动带上,靠 HttpOnly + Secure + SameSite 三道防线保住安全的底线。 核心知识点 1. Cookie 的写入与读取 // —— 服务端设置(推荐方式)—— // Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSit...
一句话概括 浏览器端四种存储方案——Cookie、localStorage、sessionStorage、IndexedDB——各有分工:Cookie 管身份传递,localStorage 管持久化偏好,sessionStorage 管会话隔离,IndexedDB 管海量结构化数据。选错方案比不会用更致命。 核心知识点 1. Cookie — 自动携带的身份牌(4KB) // 后端 ...
一句话概括 数组去重是一场关于”相等”的博弈——你能不能判断两个元素是同一个东西,决定了你的方案能对付基本类型、NaN、还是对象。[...new Set(arr)] 是最快最干净的起手式,但要搞定对象数组或自定义比较,你需要自己上场。 核心知识点 1. Set 去重——面试开场的”标准答案” const arr = [1, 2, 2, 3, NaN, NaN, '1', '1', -...
一句话概括 JS 数组遍历方法分两派:for/for-of 派(可中断、偏过程式)和 map/filter/reduce 派(不可中断、偏声明式)。面试不考你会不会用,而考你能不能从「返回值 + 中断行为 + 副作用」三个维度一秒选对方法。 核心知识点 1. forEach 和 map:一个要过程,一个要结果 const nums = [1, 2, 3]; // forEach →...