js手写——防抖

js手写打卡Day01

js 复制代码
// 事件触发后等待n秒才执行,期间如果重新触发就重新计时
// 每次触发清除一个定时器,再设置定时器

// 尾执行
const debounce = (fn,delay) => {
  let timer = null;
  return function(...args) {
      clearTimeout(timer);
      timer = setTimeout(() => {
        fn.apply(this,args);
      },delay)
  }
}

/* const log = debounce(()=> console.log('hello world'),1000);
log();
log();
log();
 */
// 立即执行
// 在尾执行的基础上加一个首执行
const debounce2 = (fn, delay, immediate) => {
  let timer = null;
  if (immediate === false) {
    return function (...args) {
      clearTimeout(timer);
      timer = setTimeout(() => {
        fn.apply(this, args);
      }, delay);
    }
  } else {
    return function (...args) {
      if (!timer) {
        fn.apply(this, args);
      }
      clearTimeout(timer);
      timer = setTimeout(() => {
        timer = null;
      }, delay);
    }
  }
}

const log = debounce2(()=> console.log('hello world'),1000,false);
log();
log();
log();
相关推荐
zx_741484815 小时前
PyQt5 环境搭建保姆级教程:PyCharm + QtDesigner + PyUIC 完整配置
开发语言·qt·pycharm·pyqt
志尊宝5 小时前
Vue3 零基础每日笔记(080):Vue3 + ECharts 数据可视化——封装可复用图表组件
前端·javascript·vue.js·笔记·信息可视化·echarts
阿狗童鞋5 小时前
前端工程化实战指南
前端
CappuccinoRose5 小时前
CSS 动效基础
前端·css·动画·animation·transition
用户4402818278075 小时前
我用 TRAE 一晚上从零撸了个微信投票小程序: 17 个云函数 + 11 个页面的全链路实战
前端
BullSmall5 小时前
SonarQube 9.9.8-community 适配 Jenkins 版本说明
java·前端·jenkins
tryCbest5 小时前
第一篇:HTML5 核心知识全解 + 项目起步
前端·html·html5
Soari5 小时前
交换机转发模式
开发语言·网络·php
百度一下吧6 小时前
CSS 伪类使用与实践:从入门到进阶
前端·css
hunterandroid6 小时前
android方案 : Multiplatform 跨平台开发实战:一套代码,多端运行
android·前端