什么是闭包
从广义上讲:所有的函数都是闭包,
从狭义上讲:一个函数必须要满足两个条件,
- 一个函数要嵌套一个内部函数,标并且内部函数要访问外部函数的变量
- 内部函数要被外部引用
为什么要使用闭包
为了保持在函数内部声明的变量
闭包的原理
闭包就是把变量保护起来,让它不受外部污染,用一个内部函数来操作变量,在把它封装在一个外部函数中,且外部函数返回内部函数。
闭包的优缺点
优点
1、通过闭包可以让外部环境访问到函数内部的局部变量。
2、通过闭包可以让局部变量持续保持下来,不随着它的上下文环境一起销毁。
缺点
长时间占用容易导致内存泄漏
闭包的应用
防止变量命名冲突\保存部分动态变量值在内存中
比如经常会使用时间函数对某一个变量进行操作,如:
let a = 100;
setTimeout(function () {
console.log(++a);
}, 10
在DOM事件操作中,也经常使用闭包,如:
<input id="count" type="button" value="计数">
<script>
(function(){
var cnt = 0;
var count = document.getElementById("count");
count.onclick = function(){
console.log(++cnt);
}
})()
</script>