* 理解闭包

87 阅读1分钟

闭包

闭包在前端开发过程或者面试中都会遇到,那到底什么是闭包,我的理解看来,可以保留局部变量不被释放的代码块,叫做闭包。

1. 理解闭包

理解闭包之前,首先要知道全局变量和局部变量。

1.1 全局变量,局部变量
let a = 1;
function f() {
    console.log(a); // 函数内部可以读取全局变量
}
f(); // 1

function f2() {
    let a2 = 222;
}
console.log(a2); // a2未定义, 外部不能读取函数内部变量

闭包就是能够读取其他函数内部变量的函数。

2. 创建闭包
function demo() {
    let x = 1;
    return function () {
        return ++x;
    };
}
let a = demo()
console.log(a());  // x: 2;
console.log(a());  // x: 3

上面例子中,可以看出变量x始终存在定义函数中,没有被释放。所以实际中使用闭包要注意人为的去清除变量,避免内存一直占用,导致内存溢出。

总之,闭包就是为了读取其它函数内部变量,能始终存储在内存中,也可以看出,创建闭包条件有两点,一是存在内,外两层函数,二是内层函数对外层函数的变量进行了引用。