JS手写面试题 --- 防抖节流

Posted lvhanghmm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS手写面试题 --- 防抖节流相关的知识,希望对你有一定的参考价值。

JS手写面试题 --- 防抖、节流

题目描述:手写防抖节流

实现代码如下:
防抖: 防抖是指在一定的时间内再次触发此事件,会清空上次的事件重新开始,如果制定的时间内没有再次触发,那么这个事件才会执行

例如: input输入信息,不可能每次按下都发起一个ajax请求,可以等一段时间内不输入了之后在发起请求

// 防抖
    function debounce(fn, delay = 300) {
        // 默认 300毫秒
        let timer;
        return function () {
            const args = arguments;
            if (timer) {
                clearTimeout(timer);
            }
            timer = setTimeout(() => {
                fn.apply(this, args); // 改变 this 指向为调用debounce所指的对象
            }, delay);
        };
    }

    window.addEventListener(
        "scroll", debounce(() => {
            console.log(111);
        }, 1000)
    );

节流: 节流是指在一定的时间同一事件只会触发一次,只有超过了这个时间才会再次出发

例如: 验证码60秒内不可以再次触发(实际开发肯定是使用禁止,但是原理和验证码一样)

// 节流
// 设置一个标志
    function throttled(fn, delay) {
        let flag = true;
        return () => {
            if (!flag) return;
            flag = false;
            timer = setTimeout(() => {
                fn();
                flag = true;
            }, delay);
        };
    }

    window.addEventListener(
        "scroll", throttled(() => {
            console.log(111);
        }, 1000)
    );

以上是关于JS手写面试题 --- 防抖节流的主要内容,如果未能解决你的问题,请参考以下文章

22 道高频 JavaScript 手写面试题及答案

☀️七分钟学会手写防抖和节流

☀️七分钟学会手写防抖和节流

js防抖与节流

面试官说手写 :防抖和节流

面试前端面试常考手写题 - JavaScript - CSS