JavaScript 高频追问 Q&A
A: 每轮宏任务后会清空微任务队列再进入下一轮。(深入阅读:事件循环 Event Loop、宏任务和微任务)
JavaScript 高频追问 Q&A
1. Q: 事件循环里微任务和宏任务顺序?
A: 每轮宏任务后会清空微任务队列再进入下一轮。(深入阅读:事件循环 Event Loop、宏任务和微任务)
2. Q: 闭包的核心价值?
A: 保留函数创建时作用域,实现状态封装。(深入阅读:闭包的原理与使用场景)
3. Q: 原型链查找规则?
A: 先查对象本身,再沿 [[Prototype]] 向上查找。(深入阅读:JavaScript 原型链)
4. Q: 深拷贝常见坑?
A: 循环引用、函数/原型/特殊对象类型处理。(深入阅读:深拷贝与浅拷贝)
5. Q: 防抖和节流差异?
A: 防抖“只要最后一次”,节流“固定间隔执行”。(深入阅读:防抖和节流的原理与场景)
6. Q: == 为什么容易答错?
A: == 使用抽象相等比较,可能先做 ToPrimitive、ToNumber 或字符串转换;null 只与 undefined 宽松相等。工程代码默认使用 ===,详细边界见 JavaScript 运行机制与资深面试。(深入阅读:类型转换与相等算法)
7. Q: Cookie、localStorage、sessionStorage 怎么选?
A: Cookie 适合短小会话标识并可配合 HttpOnly、Secure、SameSite;Storage 适合非敏感的前端状态,但值是字符串且可被脚本读取;大量结构化离线数据考虑 IndexedDB。更多场景见 浏览器 API 与安全场景。(深入阅读:Cookie、Web Storage 与 IndexedDB)
8. Q: 大文件上传如何支持断点续传?
A: 客户端用 Blob.slice 分片,携带会话 ID、分片序号和文件标识上传;服务端记录已完成分片并在最后合并。扩展名和 file.type 只能做提示,文件头和内容必须由服务端复核。(深入阅读:文件上传与断点续传)
9. Q: XSS 和 CSRF 的区别?
A: XSS 是不可信脚本进入受信任页面,CSRF 是借用浏览器已有身份发起非预期请求;分别用上下文输出编码/CSP,以及 CSRF token、SameSite 和 Origin 校验等措施防护。(深入阅读:跨域、XSS 与 CSRF)
10. Q: IntersectionObserver 为什么比滚动监听适合曝光?
A: 它异步报告元素与视口或指定 root 的交叉比例,减少手动读取布局和滚动事件节流;threshold 是比例,不是像素距离。(深入阅读:判断元素是否进入可视区域)