手写完整深拷贝函数深度解析
从零手写支持多种数据类型、循环引用、Symbol的完整深拷贝函数,深入理解引用类型复制原理
从零手写支持多种数据类型、循环引用、Symbol的完整深拷贝函数,深入理解引用类型复制原理
深入解析不可变数据的概念、结构共享机制、Immer.js原理及React/Vue中的应用
一句话概括 深拷贝遇到对象属性指回自身时,用 WeakMap 建立「原对象→副本」的映射表,既能检测循环防止无限递归,又不会因为强引用阻止垃圾回收。 核心知识点 1. 为什么 JSON 方案直接挂掉? 因为 JSON.stringify 内部遍历对象图时发现自己回到了起点,V8 直接抛错——它没有「记录已路过节点」的能力。 const obj = { name: 'Alice' }...
一句话概括 深拷贝本质上是递归遍历对象的每一层、对每种数据类型做针对性重建,同时用 WeakMap 解决循环引用——JSON.stringify 只是应试时的快捷答案,真正面试拼的是类型边界覆盖和循环引用处理。 核心知识点 1. 类型判断是地基 抄对象之前,先知道手里拿的是什么。typeof 只能区分基本类型和 object,数组、Date、null 全都混在一起。面试官想听的是 O...
一句话概括 浅拷贝「只复制第一层」:基本类型值独立、嵌套对象共享引用——{ ...obj } 改 name 没事,改 info.city 原对象也跟着变。 核心知识点 1. 展开运算符 — 最推荐的浅拷贝 const user = { name: 'Alice', info: { city: 'Beijing' } }; const copy = { ...user }; co...
一句话概括 手写 Promise.all / Promise.race / Promise.allSettled 的底层只用了一个计数器 + 一个 settled 标志,而并发调度器不过是在这层机制上套了一个 while (running < max && queue.length) 的消费循环——理解这四个字就理解了 Promise 组合的全部。 核心知识点 ①...
一句话概括:JavaScript 异步错误处理的本质是「调用栈的时空错位」——try-catch 只能抓住同一微秒内发生在同一调用栈的错误,而 Promise 链式冒泡和 async/await 让异步错误重新变得可追踪。 核心知识点 1. try-catch 的同步边界 try-catch 的覆盖范围止步于当前调用栈。异步回调在未来的新调用栈中执行,已经走出了 try 块的控制范围...
一句话概括 AbortController 是浏览器原生的”取消按钮”——把它的 signal 塞进 fetch,随时调用 abort() 就能干净利落地中断请求,告别竞态 bug 和内存泄漏。 核心知识点 1. 三行代码看懂 AbortController const controller = new AbortController(); fetch('/api/data', {...
实现一个并发请求控制器——限制同时执行的任务数、管理等待队列、支持失败重试,构建健壮的异步任务调度系统。
all → 全赢才赢,race → 第一个落定说了算,allSettled → 不等输赢全汇总,any → 有一个赢就赢。四句话搞定四个静态方法。