闭包
什么是闭包
闭包是一种语法特性。 js 的所有函数都支持闭包
// 对于一个函数来说,变量类型有:全局变量、局部变量、自由变量。
闭包 = 函数 + 自由变量(非全局变量,非局部变量)
{
let a = 1
function test() { // 这个函数访问了它外部的自由变量(不是全局变量),这个函数,和这个自由变量,就形成了一个闭包。
a = a + 1
}
// 这里的自由变量不能是全局变量,因为如果是全局变量,在哪里都能访问,所以没办法区分是闭包提供的访问外部变量的能力,还是全局变量提供的能力。
}
一般将上面的代码防在非全局环境里面,即这样写:
var test = function () {
let a = 2
const res = () => {
a = a + 1
}
return res
}
// 这里的 a 和函数 res 形成了闭包
// 或者可以直接这样写
const test2 = function () {
let a = 2;
return () => a = a + 1
}
闭包有什么作用:
- 避免污染全局环境。
- 提供对局部变量的间接访问。
- 维持变量,避免被垃圾回收。
优缺点:
- 优点:简单、好用。
- 缺点,闭包使用不当,会导致内存泄漏。
- 解决办法:少用闭包,慎用闭包。