function debounce(callback, delay = 300) {
  let timeout;

  return (...args) => {
    clearTimeout(timeout);

    timeout = setTimeout(() => {
      callback(...args);
    }, delay);
  };
}

// Example: avoid running a search request on every keystroke
const search = debounce((query) => {
  console.log("Searching for:", query);
}, 500);

search("javascript");
search("javascript debounce");
search("javascript debounce function");