防抖节流、闭包

112 阅读1分钟

闭包

  • 指有权访问另一个函数作用域中的变量的函数
  • 个人理解,变量主要在一个函数(多次被调用)中使用时,闭包一定程度上避免了全局变量的使用 eg. 如下面代码中的timer、valid

防抖

规定时间内多次触发同一个事件,以最后一次为准只响应一次

function debounce(fn, delay) {
    let timer = null
    return function (params) {
        if(timer) {
            clearTimeout(timer)
        }
        timer = setTimeout(() => {
            fn(params)
        }, delay);
    }
}
function scrollPrint(val) {
    console.log(val)
}
document.onscroll = debounce(() => {scrollPrint('kkk')}, 4000)

节流

执行一次操作后,规定时间内再次执行无效

function throttle(fn, delay) {
    let valid = true
    return function (params) {
        if (valid) {
            fn(params)
            valid = false
            setTimeout(() => {
                valid = true
            }, delay);
        }
    }
}
function scrollPrint(val) {
    console.log(val)
}
document.onscroll = throttle(() => {scrollPrint('kkk')}, 4000)

高阶函数内部的this