什么是闭包?形成闭包的条件?闭包的优点和缺点?闭包有哪些作用?
1.闭包须具备三个条件,缺一不可。
2.函数A里面直接或者间接返回一个函数B。
3. 函数B里面使用着函数A里面的私有变量或者私有数据。
4. A函数在外面有一个变量来接收函数B,形成一个不会销毁的函数空间
5. 闭包函数示例:
function A(){
//这个num变量就是函数A的私有变量
var num = 100 ;
return function B() {
num++;
console.log(num);
}
}
//res接收的是A函数执行完成以后的返回值,
//res接收的是A函数内部返回的一个复杂的数据类型(函数B)
//导致A函数的执行空间不会被销毁
var res1 = A();
var res2 = A();
res1 = 101;
res2 = 101;
res1 = 102;
res2 = 102;
res2 = 103;
...
闭包的有点和缺点:
1.延长了变量的生命周期
优点:因为执行空间不会销毁,变量也不会被销毁
缺点:因为执行空间不会销毁,会一直存在内存中
2.可以访问函数内部的私有变量或者私有数据
优点:可以利用闭包访问函数内的私有变量
缺点:执行空间不会销毁,会一直存在内存中
3. 保护私有变量(只要是函数都有这个特点)
优点:保护私有变量不被外界访问
缺点:如果想要访问私有变量,必须要利用闭包函数
闭包的致命缺点:
因为当一段内存在内存空间一直存在,不被销毁,就会出现内存占用,当占用过多时,导致内存溢出,结果就容易造成内存泄漏。
闭包的作用:
当你需要延长变量的生命周期或者需要访问函数里面的私有变量或者私有数据,可以使用闭包,如果有别的办法,就尽量不使用闭包,慎用闭包,因为容易造成内存泄漏。