Skip to content

Instantly share code, notes, and snippets.

@DenisVerkhoturov
Last active March 9, 2018 22:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DenisVerkhoturov/f79fdbe332de0426ad9aae62f8503a76 to your computer and use it in GitHub Desktop.
Save DenisVerkhoturov/f79fdbe332de0426ad9aae62f8503a76 to your computer and use it in GitHub Desktop.

1. Debounce

Реализовать функцию, которая принимает функцию и время в миллесекундах и следит за тем, чтобы переданная функция была вывана только в том случае, если с предыдущего вызова прошло определенное время, иначе функция не должна делать ни чего сразу, а только назначать выполнение функции по истечении определенного времени.

  function greeting(name) {
    console.log(`Greetings, ${name}!=D`);
  }
  
  greeting("Gloin");
  greeting("Dwalin");
  greeting("Thorin");
  // Приветствует всех гномов по очереди.
  
  const debouncedGreeting = debounce(greeting, 200);
  
  debouncedGreeting("Gloin");
  debouncedGreeting("Dwalin");
  debouncedGreeting("Thorin");
  // Приветствует только Торина.

Контракт функции должен быть таким.

/**
 * @param {function} func Декорируемая функция.
 * @param {number} threshold Время в миллесекундах, которое должно пройти с последнего вызова.
 * @returns {function} Функция, которая выполняется только если с момента последнего вызова
 * прошло определенное в {@code threshold} количество времени.
 */
function debounce(func, threshold) { /* ... */ }

2. Throttle

Реализовать функцию, которая принимает функцию и время в миллесекундах, и следит за тем, чтобы функция, выполнялась не чаще, чем раз в определенное время. То есть, функция выполняется только если после предыдущего выполнения прошло определенное время. Часть вызовов при этом просто игнорируется.

  function greeting(name) {
    console.log(`Greetings, ${name}!=D`);
  }
  
  greeting("Gloin");
  greeting("Dwalin");
  greeting("Thorin");
  // Приветствует всех гномов по очереди.
  
  const throttledGreeting = throttle(greeting, 200);
  
  throttledGreeting("Gloin");
  throttledGreeting("Dwalin");
  throttledGreeting("Thorin");
  // Приветствует только Глоина.

Контракт функции должен быть таким.

/**
 * @param {function} func Декорируемая функция.
 * @param {number} threshold Время в миллесекундах, которое должно пройти с последнего вызова.
 * @returns {function} Функция, которая выполняется только если с момента последнего вызова
 * прошло определенное в {@code threshold} количество времени иначе вызов игнорируется.
 */
function throttle(func, threshold) { /* ... */ }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment