1. 对闭包的理解
闭包是指有权访问另一个函数作用域中变量的函数,比如在函数A中声明了另一个函数B 且函数B引用了函数A中的变量 并将内部函数B作为外部函数A的返回值,那么这个函数B就是我们所说的闭包
闭包的条件:嵌套内层函数引用外层函数的变量,外部函数返回值为内部函数B
作用:一个是可以直接访问函数内部的私有变量,并且形成私有空间,不受外界干扰(保护),另一个就是让这些变量的值始终保持在内存中(保存)
使用场景:创建私有变量、延长变量的声明周期 比如使用闭包模拟私有变量、方法、实现函数柯里化 、模块化、setTimeout传参、回调、立即执行函数、函数防抖、节流等
缺点:闭包会使得函数中的变量都被长久保存在内存中,增加内存使用量。滥用闭包可能导致内存泄漏。(不再用到的内存,没有及时释放,就叫做内存泄漏)
2. 手写一个闭包函数
function Closures(){
let num = 0;
//这是一个简单闭包
return function(){
return ++num
}
}
const newClosures = Closures()
console.log(newClosures()) //输出1
console.log(newClosures()) //输出2