37.闭包基本概念

  1. 什么是闭包(closure)?
    闭包是一种特殊的函数

  2. 如何生成一个闭包?
    当一个内部函数引用了外部函数的数据(变量/函数)时, 那么内部的函数就是闭包
    所以只要满足”是函数嵌套“、”内部函数引用外部函数数据

  3. 闭包特点:
    只要闭包还在使用外部函数的数据, 那么外部的数据就一直不会被释放
    也就是说可以延长外部函数数据的生命周期

  4. 闭包注意点:
    当后续不需要使用闭包时候, 一定要手动将闭包设置为null, 否则会出现内存泄漏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function test1() {
var i = 666; // 局部变量
} // 只要代码执行到了大括号结束, i这个变量就会自动释放
console.log(i); // i is not defined
*/
function test2() {
var i = 666;
// 由于demo函数满足闭包的两个条件, 所以demo函数就是闭包
return function demo() {
console.log(i);
}
}
let fn = test();
fn(); // 666,i能访问,证明了闭包可以延长外部函数数据的生命周期
  • 默认情况下,外部是不能访问内部的函数的数据的,比如不能访问i,如果不用闭包,i在函数 test2的}时候,已经销毁了,哪里能访问?就是生命到期了,用了闭包之后,就可以访问i了,因为闭包可以延长数据的生命周期。