闭包
什么是闭包???
- 官方解释:闭包是指有权访问另一个函数作用域中的变量的函数
- 个人理解:
1.函数A返回函数B,函数B中操作函数A中的变量,执行函数A将返回的函数B赋值给全局变量。
2.因为函数B使用了函数A中的变量,函数A执行完后,不会销毁,实现B函数的多次使用
3.函数A的变量外部不能调用,所以实现了变量的私有
闭包的特点
- 函数嵌套函数
- 函数内部可以引用外部的参数和变量
- 函数外不能访问函数内的参数和变量
- 参数和变量不会被垃圾回收机制回收
闭包的目的
- 希望一个变量长期驻扎在内存中
- 避免全局变量的污染
- 私有成员的存在
缺点
- 由于函数不自动销毁,会造成内存泄漏
function fn1(){
var a=1;
// 因为返回的函数被存储在全局变量中,
// 并且这个返回的函数使用这个a的局部变量,因此a被保存在堆中
return function(){
a++;
console.log(a);
}
}
var f=fn1();
f() // 2
f(); // 3
闭包封装工具包
var Utils=(function(){
var num=0;
return {
a:function(){
num++;
console.log(num);
},
b:function(){
}
}
})();
Utils.a();
Utils.a();
Utils.a();