一、JavaScript 核心:闭包、原型链与异步编程
高频问题
- “闭包的常见使用场景是什么?滥用会导致什么问题?”
- “如何实现一个
new
运算符?手动实现时有哪些细节需要注意?” - “
Promise.then
的链式调用中,错误处理如何逐层传递?”
避坑要点
-
闭包的内存泄漏“隐形杀手”
- 经典错误:在循环中创建闭包,误用变量(如用
var
导致变量污染)。 - 代码示例:
for (var i = 0; i < 5; i++) { setTimeout(() => console.log(i), 100); // 输出 5 个 5 } // 修复方案:改用 let 或 IIFE 隔离作用域
- 进阶考点:如何用
WeakMap
管理闭包引用,避免内存泄漏。
- 经典错误:在循环中创建闭包,误用变量(如用
-
原型链的“隐藏坑”
- 面试题:
function Person() { } Person.prototype = { name: "Alice" }; const p = new Person(); console.log(p.constructor === Person); // false!
- 避坑解析:手动覆盖
prototype
会破坏constructor
指向,需显式修复:Person.prototype = { constructor: Person, // 修复构造函数指向 name: "Alice" };
- 面试题:
-
异步编程的“执行顺序陷阱”
- 代码分析:
console.log(1); setTimeout(() => console.log(2), 0)
- 代码分析: