简单认识闭包函数

9次阅读

共计 576 个字符,预计需要花费 2 分钟才能阅读完成。

1. 什么是闭包?闭包的特点是什么?

闭包是一个函数,不过这个函数是声明在另外一个函数内部的,可以读取另外一个函数内部的变量。闭包其实非常常见,只不过可能我们很少意识到,这就是闭包。
闭包最大的特点就是可以记住自己的诞生环境,无论在何处调用,访问的都是声明时作用域的变量,可以访问到父函数中的变量, 比如:

    function fn1() {
        var b=234;
        function fn2() {console.log(b);
        }
        return fn2;
    }
    var fn2=fn1();
    fn2();//234

此时,fn2就是一个闭包函数,由于 js 中是的作用域是词法作用域,即函数的作用域是由函数的声明位置确定的,所以 fn2fn1中声明的时候,它的作用域和作用域链就确定了,当 fn2 执行时,创建执行环境时,会根据作用域链向上逐级查找变量,最终在 fn1 中找到变量 b,这就是为什么在外部调用 fn2 时,能够输出 fn1b的值,也是为什么说闭包函数可以记住自己的诞生环境。

2. 闭包函数的注意点

一般函数在执行完成后,其中的变量没有再被使用,内存就会被回收,
但是在闭包函数中,由于全局中的 fn2 一直被引用,所以 fn1 也不会被回收,变量 b 也会留在内存中。
因此,为了避免这种内存不被回收的问题,我们在使用完闭包函数 fn2 之后,要将闭包函数置空,切断引用关系,以实现回收 fn1 内存的目的

fn2=null;
正文完
 0