javascript 闭包

86 阅读1分钟

概念

闭包是一种函数的用法。体现成函数内部使用了另一个函数的变量

闭包的应用

闭包的应用围绕着其可以使用另一个函数的的变量这个特点

防抖 & 节流

防抖:延时一定时间触发,若再次请求则重新延时

btn.addEventListener('click', (() => {
    let timer = null
    return () => {
        if (timer) {
            clearTimeout(timer)
        }
        timer = setTimeout(() => {
            console.log('执行操作')
        }, 1000)
    }
})())

节流:一定时间内只触发一次

btn.addEventListener('click', () => {
    let canClick = true
    return () => {
        if (!canClick) {
            return
        }
        canClick = false
        setTime(() => {
            canClick = true
        }, 1000)
        console.log('执行操作')
    }
})

柯里化

概念:优化重复参数的情况

const getArea = (width) => {
    return (height) => {
        return width * height
    }
}

const getTenArea = getArea(10)

getTenArea(10) // 10 * 10
getTenArea(20) // 10 * 20
getTenArea(30) // 10 * 30

注意

因为闭包中对另一个函数的引用会导致另一个函数的释放问题。如果闭包一直存在则另一个函数将不会被释放