手写 Promise:从状态机到 then 链式调用一步步实现
会用 Promise 和懂 Promise 是两回事。这篇从三个状态、then 的注册与触发讲起,一步步手写一个符合 Promise/A+ 核心语义的实现,把异步、链式调用、值穿透、错误冒泡这些机制彻底讲明白。
会用 Promise 和懂 Promise 是两回事。这篇从三个状态、then 的注册与触发讲起,一步步手写一个符合 Promise/A+ 核心语义的实现,把异步、链式调用、值穿透、错误冒泡这些机制彻底讲明白。
SPA 切换页面不刷新,URL 还能变、还能前进后退,这是怎么做到的?这篇讲清前端路由的两种实现——hash 模式和 history 模式,并各自手写一个极简路由,最后说清 history 模式为什么需要服务端配合。
用户快速切换 tab,旧请求的响应后回来覆盖了新数据——这种竞态 bug 很隐蔽。AbortController 是 Web 平台取消异步操作的标准方案。这篇讲清它怎么取消 fetch、处理竞态、配合超时,以及框架里的用法。
监听元素是否进入视口,过去要靠 scroll 事件加 getBoundingClientRect,既卡又难写。IntersectionObserver 把这件事交给浏览器异步处理。这篇用三个真实场景讲透它的用法和参数。
事件委托是前端最实用的性能技巧之一,但要真正用对,得先搞懂事件流的三个阶段、target 和 currentTarget 的区别。这篇把事件冒泡、捕获讲透,再落到动态列表、阻止冒泡等真实场景。
扩展运算符只能拷一层,JSON.parse(JSON.stringify) 会丢失一堆类型,structuredClone 又有它的边界。这篇把浅拷贝、深拷贝的各种方案串起来,最后手写一个能处理循环引用和特殊类型的深拷贝。
防抖和节流是前端最常被问、也最常写错的两个工具函数。这篇从搜索框、滚动监听这些真实场景出发,把两者的差别、几种实现变体,以及可取消、Promise 化等进阶写法一次讲清。
为什么 setTimeout 总是慢半拍?Promise.then 凭什么插队?这篇从单线程模型出发,把调用栈、任务队列、宏任务与微任务、以及渲染时机串成一条完整的执行链路。
原型链讲"对象怎么找属性",执行上下文讲"代码怎么跑起来",这一篇讲"标识符怎么被查找"。把全局/函数/块级作用域、自由变量、词法(静态)作用域、闭包本质、作用域和执行上下文的区别一次性讲透。
原型链讲"对象怎么找属性",执行上下文 + 调用栈讲的是"代码怎么跑起来"。这一篇把全局/函数上下文、创建阶段和执行阶段的两步流程、变量提升的本质、栈溢出和 let/const 的暂时性死区一次性讲透。
原型与原型链是 JS 最被反复"复习"也最容易绕晕的话题。这篇从"为什么有原型"开始,把 __proto__、prototype、constructor 三者画在一张图里,再讲清楚 ES6 class 只是语法糖,以及实战里 7 个常见坑。
一篇足够长的 RxJS 入门到进阶 —— Observable 是什么、为什么需要操作符、Subject 家族怎么用、热流 vs 冷流、内存泄漏怎么防,以及它跟 Promise / async-await 到底差在哪里。