JavaScript:节流、防抖详解

<!DOCTYPE html> 
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <p id="text">点击</p>
  <p id="text2">点击2</p>
  <script>
    //防抖:触发高频事件后n秒内函数只会执行最后点击的那一次,如果n秒内高频事件再次被触发,则重新计算时间
    function stabilization(fn, name) {
      //清除上一个执行的定时器
      let time = null
      return function () {
        clearInterval(time)
        time = setTimeout(() => {
          fn.call(this, name, arguments)
        }, 500)
      }
    }

    function perform(name) {
      console.log(name);
    }
    //找到标签元素,为元素添加一个事件,
    let text = document.getElementById('text').addEventListener('click', stabilization(perform, '防抖'))
    //节流:高频事件触发,但在N秒内点击N次,只会记录执行一次,所以节流会稀释函数的执行频率
    function throttle(fn, name) {
      //把变量存到闭包里
      let isLace = true
      return function () {
        //为false的时候return
        if (!isLace) return
        isLace = false
        setTimeout(() => {
          fn.call(this, name, arguments)
          isLace = true
        }, 500)
      }
    }
    //找到标签元素,为元素添加一个事件,
    let text2 = document.getElementById('text2').addEventListener('click', throttle(perform, '节流'))
  </script>
</body>

</html>

总结:防抖和节流在某些地方有些类似,都是使用了闭包延迟执行,只不过是使用方法不一样,前者是在N秒内每次点击都会重新计算时间,后者是在N秒内只会执行一次,只要区分清楚还是很容易理解的!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容