简单总结
闭包(closure):函数嵌套函数,内部的函数就是闭包,正常情况下,函数执行完成,内部变量会销毁(销毁:释放内存空间),内部函数没有执行完成,外部函数变量不会被销毁
function outerFun() {
let a = 20;
function innerFun() {
console.log(a); //可以访问外部函数的变量,作用域链的概念
}
return innerFun;
}
let fun = outerFun();
fun()
使用场景:闭包可以封装一段代码
传统不使用闭包,过多的全局变量
let a = 10, b = 20;
function add() {
return a + b;
}
function sub() {
return a - b;
}
let result1 = add();
let result2 = sub();
console.log(result1);//30
console.log(result2); //-10
使用闭包,创建个独立的私有变量(模块化)
let JC = (function () {
let a = 10, b = 20;
function add() {
return a + b;
}
function sub() {
return a - b;
}
return {
add,
sub
}
})()
let result1 = JC.add();
let result2 = JC.sub();
console.log(result1);//30
console.log(result2); //-10
全面总结
闭包(closure):
1、闭包指的是函数内部的函数,它有权取访问另一个函数的内部的变量,即使这个内部的函数被返回了,或者被调用了,他的访问权限仍然存在。
2、可以利用闭包模拟私有属性,实现数据隐藏和封装,比如防抖和节流函数封装使用了闭包,但要避免滥用闭包导致内存泄漏