别人的面试题(持续更新) promise的本质是什么Promise本质是带状态机的异步结果容器基于订阅发布模式实现内部维护pendingfulfilledrejected三种单向凝固状态异步未完成时收集.then()注册的回调异步完成后立刻触发回调队列then每次返回都是新的promise支持链式调用规范强制使用微任务调度回调提供统一接口管理异步成功失败解决传统回调地狱异步结果无法复用错误难以统一捕捉的问题继承的本质是什么js继承依托原型链实现。访问对象属性时现在对象自身找找不到就顺着[[prototype]]隐式原型往上找直到null这种委托机制实现了多个对象共享原型上的方法就是所谓的原型继承原型链有什么缺点原型上的引用类型属性被所有实例共享修改一处全部实例受影响仅支持单继承无法原生实现多继承属性查找沿着链条逐级遍历原型链过长存在性能开销for in会遍历原型链上的可枚举属性容易混入非自身属性原型链运行时可动态修改容易造成原型污染维护风险高react为什么将状态视为不可变react更新时采用浅层引用比较直接修改原对象/数组不会改变引用框架无法检测状态变更页面不刷新react18并发渲染机制下会多次读取状态快照可变数据会污染旧快照造成UI不一致配合memo/useMemo实现组件缓存优化依靠引用对比判断是否重渲染可以保存每一次状态快照支持时间旅行撤消重做状态调试发布订阅模式缺点发布者与订阅者隐式依赖事件过多时代码难以维护不易梳理消息流向排查bug困难模块销毁时忘记取消订阅会造成内存泄漏多个订阅者回调执行顺序不可控发布消息后无法直接获取订阅回调返回值大量订阅者高频广播存在一定性能开销优化统一管理事件常量禁止手写字符串事件名组件生命周期内成对on/off使用一次性订阅复杂系统限制事件数量不要滥用事件总线增加关键事件日志方便追踪emit与回调说说sass/lesssass/less都是css预处理器拓展原生css能力编译后输出标准css共同点支持变量选择器嵌套mixin混入import导入运算区别less基于js变量使用sass主流dart-sass变量$sass功能更强支持条件循环自定义函数占位选择器less高级特性较弱node-sass已经废弃统一使用dart-sass现代组件库偏向于使用sass复杂异步数据获取完整流程1.依赖串行请求获取token-获取权限列表-根据权限拉取菜单2.并行请求初始化同时拉取基础字典、全局配置3.请求防抖重复请求拦截4.全局loading局部loading5.统一错误处理、超时重试、业务错误码拦截401自动登出6.缓存策略内存缓存、刷新策略、过期清理7.组件销毁取消请求防止内存泄漏8.乐观更新回滚兜底类型判断的原理typeOf基于引擎内部类型标记只能判断原始类型和函数其他全部识别为objectinstanceof顺着实例隐式原型链[[Prototype]]查找构造函数,缺点不支持原始值原型可篡改跨iframe失效不能精准区分内置对象Object.prototype.toString.call调用原生Object原型上未被重写的toString读取内置变量[[Class]]属性返回[Object Xxxx]缺点无法区分自定义类型