关于前端:js的节流和防抖

6次阅读

共计 859 个字符,预计需要花费 3 分钟才能阅读完成。

当初大多数我的项目都在用 React 或者 Vue,再配套一个 UI 库,疾速搭建一个零碎,确实不便了日常开发工作。咱们在拥抱框架和开源工具库的同时,却慢慢淡忘了 javascript 基础知识,因为工具库太多了,须要什么 npm 上就有什么。

明天选了节流和防抖这个话题来聊聊,这也是面试高频问题。

很多人对节流防抖概念辨别不开,不晓得此时场景是用节流还是防抖?

为什么会有节流和防抖

咱们常见的比方要监听浏览器滚动事件,或监听输入框值变动查问搜寻后果等等,这些场景有个独特特点,频繁执行,然而咱们不须要太频繁,比方滚动事件,距离几百毫秒或者一秒执行回调就能满足业务需要,所以才有了节流和防抖的概念,目标是缩小事件回调执行,进步浏览器性能。

概念

节流:在规定的工夫内,只执行一次,如果这个工夫内,屡次触发,只有一次失效。
防抖:在规定的工夫内,只执行一次,如果这个工夫内,屡次触发,从新计时。

如何了解和记忆

我之前也是常常分不清,起初想到了个形象的比喻。
节流:就像流水一样,尽管要节,但还是要流的,一段一段的,工夫到,执行一次。
防抖:和节流相同,频繁骚扰,从新计时,不会执行,只有这个工夫内,没骚扰,最初会执行一次。

应用场景

了解概念了,就能分辨出应用场景了,
节流场景:监听浏览器滚动
防抖场景:input 输出搜寻 (只输出进行(多少秒不在按键盘) 时,才触发搜寻)

代码出现

次要是概念,了解好了,代码实现很简略,上面列举一种办法

// 节流
function throttle(fn,delay){
    let timer
    return function() {if(timer){return false}
       timer = setTimeout(() => {fn()
         clearTimeout(timer);
         timer = null;
       }, delay)
    }
}
// 防抖
function debounce(fn,delay){
    let timer = null
    return function() {if(timer){clearTimeout(timer) 
        }
        timer = setTimeout(fn,delay) 
    }
}

正文完
 0