之前在网上看的什么是闭包,全是复制粘贴,也没弄清楚。
首先说下闭包:闭包就是重用一个变量,且保证这个变量不会被污染的一种机制。提到变量,我们应该知道。变量分为全局变量和局部变量
- 全局变量:可重用但是会被污染
- 局部变量:函数内部使用,不会被污染但是不能重用
那么问题来了如何使得变量既能重复使用且不会被污染呢?
这个时候闭包出现了。
- 用外层函数包裹变量以及内部函数
- 外层函数通过return将内层函数返回给外部
- 调用外层函数获取内层函数的对象,内层函数对外层包裹的变量进行了操作且改变后的值保存在了外层包裹的变量,且因为外层函数调用后,内层函数操控着外层函数包裹的变量,导致这个变量无法被释放。因此会形成闭包。
但是闭包也存在一些缺点,比如说会占用更多内存,如果用完闭包不主动释放的话,内存会一直占着,导致内存泄露页面卡顿问题。解决方式是,在调用完毕后,将变量赋值为null或者删除变量。
附上闭包的代码:
function funA(){
var a = 10; // funA的活动对象之中;
return function(){ //匿名函数的活动对象;
alert(a);
}
}
var b = funA();
b(); //10
上述描述仅本人理解,如有错误请指正。