关于函数节流的问题

来源:7-25 播放器底部播放器适配+mixin的应用

qq_渣弹少年_0

2019-10-15

export function throttle(func, delay) {
    let runFunc = true
    return function (...args) {
        if (!runFunc) return
        runFunc = false
        setTimeout(() => {
            func.apply(this, args)
            runFunc = true
        }, delay)
    }
}

有关函数节流一直有个想问的问题,我理解的它的原理是通过函数头的标志位去判断是否执行定时器中的函数,当runFuncfalse的时候,不会执行。但是这种写法,不是每次调用函数都被第一句赋值语句给修改为true了吗,迷惑很久了,求大神解答。

写回答

1回答

ustbhuangyi

2019-10-15

这是一个闭包,当你执行 fn1 = throttle(fn,delay) ,会执行 let runFunc = true,然后返回一个新函数 fn1,之后再调用 fn1 只会执行内层函数,不会再执行 let runFnc = true。

1
0

Vue2.0高级应用教学实战,开发企业级移动端音乐Web App

Vue.js高级知识应用大集合,实战企业级APP,教你搞定组件化开发。

5432 学习 · 3804 问题

查看课程