ES6 高频追问 Q&A
A: 都有块级作用域;const 绑定不可重新赋值。(深入阅读:var、let 与 const)
ES6 高频追问 Q&A
1. Q: let 和 const 主要区别?
A: 都有块级作用域;const 绑定不可重新赋值。(深入阅读:var、let 与 const)
2. Q: 箭头函数为什么没有 this?
A: 箭头函数捕获外层词法作用域 this,不创建自己的 this。(深入阅读:ES6 函数扩展)
3. Q: Promise 链如何传递错误?
A: 任一环节抛错会进入最近的 catch。(深入阅读:Promise 原理与使用场景)
4. Q: Map 与普通对象差异?
A: Map 键类型更灵活,迭代顺序稳定,语义更清晰。(深入阅读:Set、Map 与 WeakMap)
5. Q: async/await 本质是什么?
A: 是基于 Promise 的语法糖。(深入阅读:async 和 await 的理解)
6. Q: 数组展开和对象展开有什么区别?
A: 数组展开要求右侧可迭代(实现 Symbol.iterator);对象展开复制源对象的自有可枚举属性,二者都只做浅拷贝。见 ES6 面试真题补充。(深入阅读:数组扩展与可迭代性、对象扩展与浅合并)
7. Q: Promise.all 拒绝后,其他请求会停止吗?
A: 不会。Promise.all 只让聚合 Promise 立即拒绝,底层任务仍可能继续;需要停止请求时要显式接入 AbortController 或库的取消 API。(深入阅读:Promise 原理与使用场景)
8. Q: Generator 第一次 next(value) 会把值传给谁?
A: 第一次调用只是启动生成器,没有暂停的 yield 接收参数,所以该值会被忽略;后续 next(value) 才会成为上一次 yield 表达式的结果。(深入阅读:Iterator 与 Generator)
9. Q: WeakMap 为什么没有 size 和遍历 API?
A: 弱引用对象的回收时机不应被程序观察;如果允许枚举,就会暴露垃圾回收状态。WeakMap 适合对象元数据和缓存,不适合需要统计或遍历的集合。(深入阅读:Set、Map 与 WeakMap)
10. Q: Proxy 的 set trap 为什么要返回布尔值?
A: 它需要报告赋值是否成功;严格模式下返回 false 会抛错,且不可配置/不可写属性等不变量不能被 trap 伪造。通常用 Reflect.set(target, key, value, receiver) 转发默认行为。(深入阅读:Proxy 与 Reflect)