前端核心面试题深度解析
闭包与内存管理
什么是闭包?
闭包是指函数能够访问并记住其外部作用域中的变量,即使外部函数已经执行完毕。它由两部分组成:一个函数(通常是内部函数)以及该函数被创建时所在的作用域。
function outer() {
let count = 0;
function inner() {
count++;
console.log(count);
}
return inner;
}
const counter = outer();
counter(); // 输出 1
counter(); // 输出 2
核心原理与应用
闭包的核心在于作用域链和变量持久化。当内部函数访问变量时,会沿着作用域链向上查找,这使得外部函数的变量不会被垃圾回收。
常见用途:
- 私有变量封装:通过闭包隐藏内部变量,仅暴露操作接口。
- 函数柯里化:将多参数函数转换为单参数链式调用。
- 事件处理:在事件监听中保留上下文变量。
陷阱与解决方案
循环中的闭包问题:在 var 声明的循环中创建的闭包共享同一个变量,导致意外结果。
// 问题示例
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // 输出 3, 3, 3
}, 100);
}
// 解决方案:使用 let 或 IIFE
for (let i = 0; i < 3; i++) {
setTimeout(function() {
.(i);
}, );
}


