闭包的现象:当内部的函数被保存在外部时,将会生成闭包。闭包会导致原有的作用域链不释放,造成内存泄漏(占用的多了,剩下的就少了)。
闭包的作用:
1.实现公用变量eg:函数累加器
function add(){
var count = 0;
function demo(){
count ++;
console.log(count);
}
return demo;
}
var counter = add();
counter();
counter();
counter();
counter();
2.可以做缓存(存储结构)eg:eater
function test(){
var num = 100;
function a(){
num ++;
console.log(num);
}
function b(){
num --;
console.log(num);
}
return [a,b];//数组第一位放的是函数a,第二位放的是函数b
}
var myArr = test();
myArr[0]();//a
myArr[1]();//101 100
形成闭包吗?a和test形成的闭包与b和test形成的闭包公用的是不是一个test的AO?如果公用的是一个他的AO的话,那他改,他一定也跟着改,是吧。test里放再多,他们连的线都是test的劳动成果。test相当于一个父亲,a大儿子,b是小儿子,
他俩拿的钱不是一个爹的吗?必须是一个啊。所以a被保存出来之后,他身上有一个被定义的状态是:test的AO连着GO对吧。B被保存出来之后是test的AO连着GO
,他俩test的AO连着GO是一个人,完全一样的。a和test形成一个闭包,b也和test形成一个闭包,但是a在用test的时候是在100的基础上去改的数,改完之后,b在a改完的基础上再用。
3.可以实现封装,属性私有化eg:person();
4.模块化开发,防止污染全局变量