1.1理解闭包
-
定义:当函数可以记住并访问所在的词法作用域(涉及到作用域和作用域链的相关知识)
-
闭包本质上就是一个函数,但是他能够访问其他函数的作用域。
-
闭包最简单的实现方式就是,一个函数内部再创建并返回一个函数,那么这个内部函数就被称为闭包。
-
这个函数持有对外部函数执行上下文的一个引用,可以访问到外部函数的变量等等
1.2闭包的特性
-
闭包可以解决变量命名冲突问题
-
可以保护私有变量
-
但是由于闭包一直持有对外部函数的引用,所以外部函数在内存中无法被销毁,导致内存占用率比较高,如果使用不当还会造成内存泄漏
1.3闭包的应用
-
最简单的例子就是我们的定时器了,在函数内部开启一个定时器,如下所示
function fun(){
let a=10;
setTimeout((()=>{
console.log(a);
}))
}
fun();//10
-
因为定时器的回调函数持有对外部函数fun的一个引用,所以他才能右值查找得到a变量的值,就是闭包的一个简单的应用。
-
其次还有防抖和节流的封装以及模块化,都用到了闭包,以及函数的柯里化都用到了闭包。