防止用户的请求过于频繁
    只要最后一次的时间操作

    防抖算法:

    1. let inp = document.querySelector("input");
    2. let time = null;
    3. inp.oninput = function() {
    4. if (t !== null) {
    5. clearTimeout(t);
    6. }
    7. t = setTimeout(() => {
    8. // 封装的业务逻辑代码
    9. }, 500);
    10. }

    设置input输入框,绑定事件oninput,输入框检测到用户的输入时,触发function函数,每一次触发,t都会被附一个计时器,假设第一次触发事件后以后都不在触发事件,则在500ms后自动执行封装的业务逻辑代码,如果在500ms之后又进行了一次触发操作,则原计时器会被清空,并且赋给变量time一个新的计时器,重新从500ms开始倒计时,这样如果每次的触发事件的时间间隔都小于500ms时,业务逻辑不会执行,等到计时器到时间了才会执行。

    注意:防抖的算法和核心业务逻辑分开封装,利用闭包封装。

    1. let inp = document.querySelector("input");
    2. inp.oninput = debounce(function() {
    3. // 封装业务逻辑代码
    4. }, 500) // 传入两个参数,执行业务逻辑函数,防抖的时间间隔
    5. function debounce(fn, delay) {
    6. return function() {
    7. if (t !== null) {
    8. clearTimeout(t);
    9. }
    10. t = setTimeout(() => {
    11. fn();
    12. }, delay);
    13. }
    14. }