javascript之闭包

闭包是函数里面又定义了一个函数,这个函数里面的函数,就是闭包

javascript 复制代码
    function f1()
    {
        let n=25
        function f2() //f2函数是闭包
        {
            console.log("闭包")
            
            return n
        }
//f2函数就是闭包
//如何调用这个闭包
let a=f1() //这时候a的值是f2()函数
a()  //a()就是调用闭包函数

闭包的作用就是在函数内外外搭起一个桥梁

还拿上面的例子

javascript 复制代码
    function f1()
    {
        let n=25
        function f2() 
        {
            return n
        }
        return f2 
    }

可以看出f1函数里面定义了一个变量n,如果想在函数外面访问它

javascript 复制代码
let a=f1()
let b=a()
console.log(b) //输出的结果就是f1函数里面n的值

上面的代码中console.log(b)输出的就是f1函数里面定义的n的值

闭包的另外一个作用就是避免局部变量被垃圾回收器回收

先看第一个不用闭包的函数

javascript 复制代码
function f3()
    {
        let m=12
        console.log(m++)
    }

第二个用闭包的函数

javascript 复制代码
 function f4()
    {
        let n=99
        function f5()
        {
            console.log(n++)
        }
        return f5
    }

第一个个不用闭包的函数,每次执行结果都是12

第二个用闭包的函数,每次执行结果是在99基础上加1,说明变量没有被回收