JavaScript Interview Questions
  • JavaScript Interview Questions
  • Contact
  • Introduction
  • Question 1
  • Question 2
  • Question 3
  • Question 4
  • Question 5
  • Question 6
  • Question 7
  • Question 8
  • Question 9
  • Question 10
  • Question 11
  • Question 12
  • Question 13
  • Question 14
  • Question 15
  • Question 16
  • Question 17
  • Question 18
  • Question 19
  • Question 20
  • Question 21
  • Question 22
  • Question 23
  • Question 24
  • Question 25
  • Question 26
  • Question 27
  • Question 28
  • Question 29
  • Question 30
  • Question 31
  • Question 32
  • Question 33
  • Question 34
  • Question 35
  • Question 36
  • Question 37
  • Question 38
  • Question 39
  • Question 40
  • Question 41
  • Question 42
  • Question 43
  • Question 44
  • Question 45
  • Question 46
  • Question 47
  • Question 48
  • Question 49
  • Question 50
  • Question 51
  • Question 52
  • Question 53
  • Question 54
  • Question 55
  • Question 56
  • Question 57
  • Question 58
  • Question 59
  • Question 60
  • Question 61
  • Question 62
  • Question 63
  • Question 64
  • Question 65
  • Question 66
  • Question 67
  • Question 68
  • Question 69
  • Question 70
  • Question 71
  • Question 72
  • Question 73
  • Question 74
  • Question 75
  • Question 76
  • Question 77
  • Question 78
  • Question 79
  • Question 80
  • Question 81
  • Question 82
  • Question 83
  • Question 84
  • Question 85
  • Question 86
  • Question 87
  • Question 88
  • Question 89
  • Question 90
  • Question 91
  • Question 92
  • Question 93
  • Question 94
  • Question 95
  • Question 96
  • Question 97
  • Question 98
  • Question 99
  • Question 100
  • Epilogue
Powered by GitBook
On this page
  • Question
  • Answer

Question 66

Question

How would you implement a custom debounce function for handling event throttling?

Answer

Debouncing is essential for optimizing performance in applications where events fire frequently, like scrolling or resizing. Here's how you can implement a custom debounce function in JavaScript:

function debounce(func, delay) {
  let timeoutId; 
  return function(...args) {
    clearTimeout(timeoutId); // Clear any previous timeout
    timeoutId = setTimeout(() => {
      func.apply(this, args); // Call the original function after the delay
    }, delay);
  };
}

// Example usage:
const handleResize = () => { 
  console.log('Window resized!'); 
  // Perform actions when window is resized
};

const debouncedResizeHandler = debounce(handleResize, 300); // Debounce with a delay of 300ms

window.addEventListener('resize', debouncedResizeHandler);

Explanation:

  1. debounce(func, delay) Function:

    • Takes two arguments:

      • func: The function you want to debounce (in this case, handleResize).

      • delay: The time in milliseconds to wait before executing the function.

  2. Inner Closure (return function(...args)):

    • Returns a new function that will be called whenever the original event happens (e.g., window resize).

    • This inner function captures the variables timeoutId and func.

    • It also takes any arguments (...args) passed to it when the original event is triggered.

  3. Clearing Timeout:

    • clearTimeout(timeoutId);: Inside the closure, before setting a new timeout, we clear any existing timeout. This ensures that only the latest call will trigger the function after the delay.

  4. Setting New Timeout:

    • timeoutId = setTimeout(() => { func.apply(this, args); }, delay);: A new timeout is set using setTimeout. The function to be executed (func) is called after the specified delay, and it's passed the captured arguments (args).

  5. Example Usage:

    • We call debounce to create a debounced version of handleResize.

    • This debounced version is then attached as an event listener to the 'resize' event on the window.

PreviousQuestion 65NextQuestion 67

Last updated 9 months ago