手写完整深拷贝函数深度解析
从零手写支持多种数据类型、循环引用、Symbol的完整深拷贝函数,深入理解引用类型复制原理
从零手写支持多种数据类型、循环引用、Symbol的完整深拷贝函数,深入理解引用类型复制原理
深入解析不可变数据的概念、结构共享机制、Immer.js原理及React/Vue中的应用
深拷贝遇到属性指回自身会无限递归,用 WeakMap 建立'原对象到副本'的映射即可检测并复用。 这样既防死循环,又避免强引用阻碍 GC,是深拷贝题的进阶加分点。
深拷贝本质是递归遍历每一层并针对数据类型重建,JSON.stringify 只是应试快捷方案。 真实面试拼的是类型边界覆盖与循环引用处理,需讲清为何不能直接 JSON 序列化。
浅拷贝只复制第一层,基本类型独立、嵌套对象共享引用,改嵌套属性会牵连原对象。 面试对比 Object.assign、展开运算符、slice 等方法的异同与适用场景。
Promise.all/race/allSettled 的底层是计数器加 settled 标志,并发调度器再套一层消费循环控制最大并发数。 面试手写重点在边界处理:空数组、错误短路、并发上限。
JS 异步错误的本质是调用栈的时空错位——try-catch 只能捕获同一调用栈的同步错误,Promise 链与 async/await 让异步错误重新可追踪。 面试要讲清错误如何冒泡到 catch 与 unhandledrejection。
AbortController 提供原生取消能力——把 signal 传入 fetch 后调用 abort() 即可中断请求,避免竞态与内存泄漏。 面试常与取消令牌、axios 已废弃的 CancelToken 做对比。
实现一个并发请求控制器——限制同时执行的任务数、管理等待队列、支持失败重试,构建健壮的异步任务调度系统。
all → 全赢才赢,race → 第一个落定说了算,allSettled → 不等输赢全汇总,any → 有一个赢就赢。四句话搞定四个静态方法。