[Medium] 手写节流 (throttle) 函式

2024年3月8日

💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

题目描述

节流 (throttle) 指的是,在一段时间(t)内只会执行一次触发事件的回调 (callback) 函式,若在这之中又有新事件触发,则不执行此回调函式。

请实践一个节流函式 throttle,此函式接收两个参数,第一个参数是一个回调函式 fn,第二个参数是延迟时间 delay,此函式遵循以上描述的行为。

本题解答

以下是本题的解答,详细解题思路可以在 E+ 成长计划看到。如果想练习更多题目,推荐可以到 GreatFrontEnd 上练习

解法

function throttle(fn, delay = 500) {
  let timer = null;

  return function (...args) {
    if (timer) return;

    timer = setTimeout(() => {
      timer = null;
    }, delay);

    fn.apply(this, args);
  };
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們