闭包
约 544 字大约 2 分钟
2025-03-12
一、概念
闭包是指一个函数和其相关的引用环境的组合。简而言之,闭包是一个函数,它可以访问其词法作用域外部的变量,并且即使在其词法作用域外部执行,仍然可以保持对这些变量的引用。
二、特点
要理解闭包,首先需要理解 词法作用域 。词法作用域是指在代码编写时确定变量作用域的规则,而不是在运行时确定。
外部函数可以通过aplly()
、bind()
、call()
来改变普通函数内部上下文。
- return 语句:闭包利用了词法作用域的特性,将函数内部的变量引用传递给了函数外部,使得函数在外部执行时仍然可以访问到这些变量。
- 私有作用域:闭包可以创建私有变量和函数,外部作用域无法直接访问闭包内部的变量和函数。
- 持久访问:闭包还可以用于创建具有持久状态的函数,即使函数执行完成后,它仍然可以记住其词法作用域中的变量。只要函数再次调用,这些变量依然可以被再次访问。
三、优缺点
优点:
闭包可以封装私有变量和方法,选择性的对外暴露属性和方法,这样有利于独立封装一些功能或者变量,避免被污染。内部函数可以访问外部函数的变量和参数,在闭包函数被回收之前,我们可以一直访问和修改这些变量。
缺点:
闭包会使得函数中的变量一直存活在内存中,可能会因为被引用的对象火属性无法被回收,导致内存占用过高,特别是在大规模使用闭包的情况下。
4. 案例
function createCounter() {
let count = 0; // 外层闭包
// 内层闭包
return function () {
return ++count; // 可以访问上一层的count,并一直保持引用
};
}
const counter = createCounter();
console.log(counter()); // 输出 1
console.log(counter()); // 输出 2
更新日志
2025/8/24 08:17
查看所有更新日志
e7112
-1于