经过这几天的研究总结出了以下几点我对闭包的理解:

1.闭包其实就是创建一个函数,使这个函数成为函数里面变量/函数的全局作用域,简单来说就是一个子函数引用了父函数的变量/函数

2.我们可以通过return的返回值来操作闭包里的数据(也就是将子函数作为父函数的返回值)

闭包的优点:

1.当函数内的变量在函数中执行完后任然存活在内存中,也就是延长了局部变量的生命周期

2.可以从函数外面操作函数内部的变量或函数

我们知道全局作用域无法访问函数内的局部变量,闭包就很好的为我们解决了这个问题

function fn(){
    var a = 1
    function fn1(){
        a++
        console.log(a)
    }
    return fn1
}
var f = fn()
f()    //2
f()    //3

以上代码可以清楚的看出函数内部的变量执行完并不会销毁,而是一直存在在函数内,当我们调用第一次的时候,子函数执行一次a++,第二次的时候又一次执行了a++,并且我们也可以分析出闭包

的作用,我们既然可以从函数外部调用函数内的变量,我们同样可以操作函数内部的变量,比较方便我们解决全局污染的问题,我们可以在不同函数内设置相同变量名的变量。

但是我们仔细分析这个函数之后会发现函数里的变量是一直存在的,如果一直存在,占用内存时间过长就会出现内存泄漏的问题,如果内存泄漏过多的话也会导致内存溢出,由此可见闭包并不是十全

十美的,既然有问题就一定有解决的办法:

1.第一点当然是我们非必要情况下尽量不用闭包,这也要根据自己的情况来决定要不要用

2.第二点就是当我们使用完闭包之后及时回收闭包,比如f = null;这样的话我们可以让函数成为一个垃圾对象

以上就是我这几天对闭包的研究成果,总之就是一句话,我们用到闭包的时候他就是优点,用不到的时候就是缺点,一切都要根据自己的实际情况来决定