想要了解闭包的用途和缺点,首先要先知道什么是闭包吧
1.什么是闭包
闭包就是能够读取其他函数内部变量的函数。在JavaScript中只有函数内部的子函数才能读取局部变量,
所以闭包本身就是一个函数,只不过是处于其它函数的内部,可以理解闭包为:”定义在一个函数内部的
函数“,在本质上,闭包是函数内部和函数外部连接起来的桥梁。
知乎大神说:闭包是指在 JavaScript 中,内部函数总是可以访问其所在的外部函数中声明的参数和变
量,即使在其外部函数被返回(寿命终结)了之后
2.闭包的用途
1.可访问函数内部的变量
2.在内存中维持一个变量。防止函数内部的变量执行完城后,被销毁,使其一直保存在内存中。
一个例子:
//1. 用最外层的函数来包裹内层函数和受保护的变量
function parents(){
var total=1000;
//2. 将内部的函数对象return到外部
return function(num){
total-=num;
document.write(`花了${
num}元,还剩下${
total}元<br>`);
}
}
//3. 调用外部函数来获得内层函数,并保存在一个外部变量中
var child=parents();
console.log(child);
child(100);
child(200);
输出结果是:
花了100元,还剩下900元
花了200元,还剩下700元
3.闭包的缺点
滥用闭包会造成内存泄露
因为闭包中引用到的包裹函数中定义的变量永远不会被释放
所以我们不再改变量或函数的时候应该及时释放这个闭包函数。