前端面试官:请你说一说函数节流和防抖

节流和防抖经常在面试中被问到,也很容易搞混,这里就记录下节流和防抖函数的实现

1. 节流

只在开始执行一次,未执行完成过程中触发的忽略,核心在于开关锁🔒。
例如:多次点击按钮提交表单,第一次有效

// 节流
function throttle(fn, delay) {
    var timer = null, firstTime = true;
    return function () {
        if (timer) { return false;}
        var that = this;
        var args = arguments;
        fn.apply(that, args);
        timer = setTimeout(function () {
            clearTimeout(timer);
            timer = null;
        }, delay || 500);
    };
}


// 使用
function clickHandler() {
    console.log('节流click!');
}
const handler = throttle(clickHandler);
document.getElementById('button').addEventListener('click', handler);

2. 防抖

只执行最后一个被触发的,清除之前的异步任务,核心在于清零。
例如:页面滚动处理事件,最后一次有效

// 防抖
function debounce(fn, delay) {
    var timer = null;
    return function () {
        var that = this;
        var args = arguments;
        clearTimeout(timer);// 清除重新计时
        timer = setTimeout(function () {
            fn.apply(that, args);
        }, delay || 500);
    };
}
// 使用
function clickHandler() {
    console.log('防抖click!');
}
const handler = debounce(clickHandler);
document.getElementById('button').addEventListener('click', handler);

关于容易搞混的问题,就记住:节流第一次有效,防抖反之

3.最后

最近断断续续整理了一些阿里、腾讯、字节等等大厂的面试题,目的是想了解一下大厂招聘的技术热点,不断提升学习。

其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器等等,免费分享给大家,还在持续整理收集整理中,有需要的朋友【点击我】免费获取。

篇幅有限,仅展示部分内容

posted @ 2020-12-28 16:52  Android程序员吴彦祖  阅读(179)  评论(0编辑  收藏  举报