闭包
1.什么是闭包?
- 闭包是指有权访问另一个函数作用域中的变量的函数
2.如何形成闭包
- 内部函数使用外部函数的变量
function a() {
let aa = 100;
function b() {
console.log(aa); // 由于引用了上级作用域中的变量 aa, 所以形成了闭包
}
b();
}
a();
function a() {
let aa = 100;
function b() {
console.log(b); // b 是上级作用域,函数 a 中声明的一个函数
}
b();
}
a();
3.如何保持闭包
- 内部函数返回到外部函数的外面
function a() {
let aa = 100;
function b() {
console.log(aa);
}
return b;
}
a();
4.闭包的使用场景
- 防抖,节流的实现中 return 的函数
- IIFE(自执行函数)
let name = 'ab';
(function p(){
console.log(name);
})();
// 输出 ab
- …
5.闭包的特点
- 闭包可以访问到父级函数的变量
- 访问到父级函数的变量不会销毁
- 变量不会被垃圾回收机制回收,这就会造成内存消耗
- 不恰当的使用闭包可能会造成内存泄漏