手写 Promise:从状态机到 then 链式调用一步步实现
会用 Promise 和懂 Promise 是两回事。这篇从三个状态、then 的注册与触发讲起,一步步手写一个符合 Promise/A+ 核心语义的实现,把异步、链式调用、值穿透、错误冒泡这些机制彻底讲明白。
会用 Promise 和懂 Promise 是两回事。这篇从三个状态、then 的注册与触发讲起,一步步手写一个符合 Promise/A+ 核心语义的实现,把异步、链式调用、值穿透、错误冒泡这些机制彻底讲明白。
SPA 切换页面不刷新,URL 还能变、还能前进后退,这是怎么做到的?这篇讲清前端路由的两种实现——hash 模式和 history 模式,并各自手写一个极简路由,最后说清 history 模式为什么需要服务端配合。
用户快速切换 tab,旧请求的响应后回来覆盖了新数据——这种竞态 bug 很隐蔽。AbortController 是 Web 平台取消异步操作的标准方案。这篇讲清它怎么取消 fetch、处理竞态、配合超时,以及框架里的用法。
图片往往是页面里最大的资源,也是拖慢 LCP 的头号嫌疑。这篇从选对格式、用 srcset 适配屏幕、懒加载、到防止布局抖动,给一套能直接落地的图片优化清单。
Cookie、localStorage、sessionStorage、IndexedDB 各有各的容量、生命周期和适用场景,选错了要么不安全要么不够用。这篇把浏览器端的主要存储方案放在一起对比,给出一张选型表和常见误区。
面试高频开放题「从 0 到 1 搭一个项目要注意什么」该怎么答?按需求、选型、工程化、架构、质量、安全、部署运维、迭代九个阶段拆解每一步的注意事项与真实踩坑,并给出一个可直接复述的回答框架。
监听元素是否进入视口,过去要靠 scroll 事件加 getBoundingClientRect,既卡又难写。IntersectionObserver 把这件事交给浏览器异步处理。这篇用三个真实场景讲透它的用法和参数。
CSS 自定义属性不只是少写几个颜色值,它能在运行时被 JS 读写、随作用域级联。这篇从 CSS 变量的基础讲到一套完整的明暗主题方案,包含防止刷新闪烁、跟随系统、平滑过渡等实战细节。
事件委托是前端最实用的性能技巧之一,但要真正用对,得先搞懂事件流的三个阶段、target 和 currentTarget 的区别。这篇把事件冒泡、捕获讲透,再落到动态列表、阻止冒泡等真实场景。
扩展运算符只能拷一层,JSON.parse(JSON.stringify) 会丢失一堆类型,structuredClone 又有它的边界。这篇把浅拷贝、深拷贝的各种方案串起来,最后手写一个能处理循环引用和特殊类型的深拷贝。