前端面试核心考点解析
JavaScript 基础与原理
闭包(Closure)
闭包是指函数能够访问并记住其外部作用域中的变量,即使外部函数已执行完毕。它由内部函数及其创建时的词法环境组成。
核心原理:
- 作用域链:函数定义时记录词法环境,访问变量时沿链查找。
- 变量持久化:闭包持有外部变量引用,阻止垃圾回收。
function outer() {
let count = 0;
function inner() {
count++;
console.log(count);
}
return inner;
}
const counter = outer();
counter(); // 输出 1
counter(); // 输出 2
常见用途:
- 私有变量封装:隐藏内部状态,仅暴露操作接口。
- 函数柯里化:将多参数函数转换为单参数链式调用。
- 事件处理:在回调中保留上下文变量。
陷阱与解决:
- 循环问题:
var声明的变量在循环中共享同一引用。使用let或 IIFE 创建块级作用域可解决。 - 内存泄漏:长期持有大对象引用。需及时解除引用或使用
WeakMap。
事件循环(Event Loop)
JavaScript 是单线程语言,通过事件循环机制处理异步任务。核心包括调用栈、宏任务队列和微任务队列。
执行流程:
- 同步任务进入调用栈执行。
- 调用栈清空后,执行所有微任务(如
Promise.then)。 - 执行一个宏任务(如
setTimeout),之后再次检查微任务。 - UI 渲染通常在宏任务之间进行。
console.log('1'); // 同步
setTimeout(() => console.(), );
.().( .());
.();


