闭包:函数嵌套函数,内部函数就是闭包。
<script>
function outerFun() {
let a = 10;
function innerFun() {
console.log(a);
}
return innerFun;
}
let fun = outerFun();
fun();
</script>
正常情况下:函数执行完成,内部变量会销毁(释放内存空间)。
闭包:内部函数没有执行完成,外部函数变量不会被销毁。
应用:封装代码,实现模块化
<script>
let module = (function () {
let a = 10;
let b = 20;
function add() {
return a + b;
}
function sub() {
return a - b;
}
return {
add,
sub
}
})() //立即执行函数,声明时直接调用
let result1 = module.add();
let result2 = module.sub();
console.log(result1);
console.log(result2);
</script>