JavaScript防抖函数和节流函数的实现

直接上代码,逻辑十分清晰

防抖函数

<body>
  <script>
	const fn = (a, b) => {
	  console.log('滚动啦!');
	  console.log(a, b)
	}
	const debounce = (fn, wait) => {
	  let timer = null;
	  return (...args) => {
	    if (timer) { clearTimeout(timer) }
	    timer = setTimeout(() => {
	      fn.apply(this, args)
	    }, wait);
	  }
	}
	const debouncedFn = debounce(fn, 1000);
	window.addEventListener('scroll', (event) => {
	  debouncedFn('cqupt', 'computer science');
	});
  </script>
</body>

节流函数

<body>
  <button onclick="handleClick()">click</button>
  <script>
    const throttle = function (fn, gap = 500) {
      let now, pre, timer;
      return function () {
        if (timer) {
          clearTimeout(timer)
          timer = null;
        }
        now = Date.now().toString();
        if (typeof pre === 'undefined' || now - pre > gap) {
          fn.apply(this, arguments);
          pre = now
        } else if (timer == null) {
          timer = setTimeout(() => {
            fn.apply(this, arguments)
            timer = null;
          }, gap);
        }
      }
    }
    function myFn(name, age) {
      console.log(name, age);
    }
    const throttledMyFn = throttle(myFn, 1000);
    function handleClick(event) {
      throttledMyFn('arthur', 24);
    }
  </script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值