JavaScript篇|闭包

64 阅读1分钟

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