1. 程式人生 > 其它 >【校招VIP】出品:校招java衝刺一線之專業課考點梳理(2022)

【校招VIP】出品:校招java衝刺一線之專業課考點梳理(2022)

一、防抖debounce(多次觸發 只執行最後一次)

  • 作用:高頻率觸發的事件,在指定的單位時間內,只響應最後一次,如果在指定的時間內再次觸發,則重新計算時間
  • 類似於回城8秒,如果回城中被打斷,再次回城需要再等8秒
  • 應用場景:搜尋提示;搜尋時不斷輸入,用防抖來節約請求資源
<body>
  <input type="text">
  <script>
    function debounce(callback, delay) {
      let timer
      return function () {  // 閉包
        clearTimeout(timer)  // 清除上次的timer
        timer = setTimeout(() => {
          callback(...arguments)
        }, delay)
      }
    }
    function say_hello(str) {  // 事件觸發函式
      console.log(str);
    }
    const new_say_hello = debounce(say_hello, 1000)  // 重構事件觸發函式
    const input = document.querySelector('input')
    input.addEventListener('keyup', e => {
      new_say_hello(e.target.value)
    })

  </script>
</body>

二、防抖throttle(規定時間內 只觸發一次)

  • 作用:限定事件在一定時間內只能執行一次
  • 節流類似於平A,受攻速的限制
  • 應用場景:監聽滾動條滾動載入資料,即邊滾動邊載入;滑鼠多次點選只觸發少次
<body>
  <button>點選</button>
  <script>
    function throttle(callback, delay) {
      let timer // 節流閥
      return function () {  // 閉包
        if (!timer) {
          timer = setTimeout(() => {
            callback(...arguments)
            timer = null  // 回撥函式執行完放開節流閥
          }, delay)
        }
      }
    }
    function say_hello(str) {
      console.log(str);
    }
    const new_say_hello = throttle(say_hello, 1000)
    const btn = document.querySelector('button')
    btn.addEventListener('click', e => {
      new_say_hello('點選了')
    })
  </script>
</body>

參考一
參考二