对于闭包,我是这么认识的,在我们这个js当中呢,变量分为两种,一种叫全局变量,一种叫局部变量。在这个变量访问的过程中,全局变量没有问题,在任何地方都可以访问到,麻烦就麻烦再局部变量,局部变量默认情况下在函数外边是访问不到的,那这个事情怎么办呢,我们就用闭包开始了。
我可以在这个函数内部,再给他定义一个函数,这个就是二重函数,我们分为父和子两个函数,那么父函数内声明的变量,在子函数内是可以访问到的。而子函数的这个方法我们认为这是一个特权函数,他可以访问父函数中的变量,以及其他方法,这就是闭包产生的由来 。
那他解决的问题是什么呢,是因为咱们有时在写一些插件或者写一些东西的时候,确实是需要调用父方法中的局部变量的,那这个时候只能对外写一个接口,就是这个子函数。
还有一个,面向对象的三大特征里的封装也是要用到闭包的,你怎么把这个变量封装起来不让外面访问,提高代码安全,那我们只能用闭包。
闭包的优点总结下来就是:1解决了局部变量不能访问的问题,2体现了面向对象编程中的封装思想。
虽然闭包有优点,但他同时也存在缺点:1闭包会浪费很多内存资源2闭包会导致内存泄漏,同时内存的数据能遭受攻击,容易造成机器的崩溃。
最后他也同时存在针对缺点的解决方法:1少用闭包2手动清空(也就是说我声明一个方法函数,让变量等于null,最后在执行后调用那个方法)
这就是我对闭包的理解