Функции DEBOBING в JavaScript являются функциями более высокого порядка, которые ограничивают скорость, при которой вызывается другая функция.
Наиболее распространенным применением для DEBOBING – пропустить его в качестве аргумента для слушателя событий, прикрепленным к элементу HTML. Чтобы лучше понять, как это выглядит, и почему это полезно, давайте посмотрим на пример.
Скажите, что у вас есть функция по имени MyFunc Это вызывается каждый раз, когда вы вводите что-то в поле ввода. После прохождения требований к вашему проекту вы решите, что вы хотите изменить опыт.
Вместо этого вы хотите MyFunc Чтобы выполнить, когда прошло как минимум на 2 секунды, с тех пор, как вы что-то ввели.
Это то, где дебат может прийти в игру. Вместо того, чтобы пройти MyFunc Слушатель мероприятия, вы бы пропустили в отборе. Само потом дебюз тогда возьмут MyFunc как аргумент, наряду с числом 2000.
Теперь, когда вы нажимаете кнопку, MyFunc будет выполняться только, если бы не менее 2 секунд прошло до последнего времени MyFunc назывался.
Как реализовать функцию Debouting
От начала до конца он занимает 7 линий кода для реализации функции Debouting. Остальная часть этого раздела ориентирована на те 7 строк кода, чтобы мы могли видеть, как наша функция Debaling работает внутри.
function debounce( callback, delay ) {
let timeout;
return function() {
clearTimeout( timeout );
timeout = setTimeout( callback, delay );
}
}Начиная с строки 1, мы объявили новую функцию имени Дебати Отказ Эта новая функция имеет два параметра, Перезвоните и задержка Отказ
function debounce( callback, delay ) {
}
Обратный вызов это любая функция, которая должна ограничивать количество раз, которые он выполняет.
задержка это время (в миллисекундах), которые нужно пройти до Обратный вызов может снова выполнить.
function debounce( callback, delay ) {
let timeout;
}В строке 2 мы объявляем неинициализированную переменную с именем время ожидания . Эта новая переменная удерживает TimeoutiD вернулся, когда мы звоним совокупность позже в нашем Дебати функция.
function debounce( callback, delay ) {
let timeout;
return function() {
}
}В строке 3 мы возвращаем анонимную функцию. Эта анонимная функция закроется над Тайм-аут Переменная, чтобы мы могли сохранить доступ к нему даже после первоначального вызова Дебати закончил выполнение.
function debounce( callback, delay ) {
let timeout;
return function() {
clearTimeout( timeout );
}
}На строке 4 мы называем Clearimeout Метод Windowroworkerglobalscope смешин. Это убедится, что каждый раз, когда мы называем нашими Дебати Функция, Тайм-аут Сброс и счетчик может начать снова.
Windowroworkerglobalscope Микс JavaScript дает нам доступ к нескольким известным методам, таких как совокупность , Clearimeout. , Setinterval , ClearInterval. и принести .
Вы можете узнать больше об этом, прочитав эту статью.
function debounce( callback, delay ) {
let timeout;
return function() {
clearTimeout( timeout );
timeout = setTimeout( callback, delay );
}
}В строке 5 мы достигли конца нашего Дебати Реализация функций.
Эта линия кода делает несколько вещей. Первое действие присваивает значение для Тайм-аут Переменная, которую мы объявили на линии 2. Значение – это TimeoutiD который возвращается, когда мы называем совокупность . Это позволит нам ссылаться на тайм-аут, созданный, позвонив совокупность так что мы можем сбросить его каждый раз наше Дебати Функция используется.
Второе действие вызывает совокупность . Это создаст время ожидания, который будет выполнять Обратный вызов (Аргумент функции передан нашему Debaling Функция) один раз задержка (Номерный аргумент, переданный нашему Debouting Функция) истек.
Так как мы используем тайм-аут, Перезвоните будет только выполнять, если мы позволим нам добраться до 0. Это где сердце нашего Дебати Функция вступает в игру, так как мы сбрасываем время ожидания каждый раз Дебати называется. Это то, что позволяет нам ограничить скорость выполнения MyFunc Отказ
Линии 5 и 6 содержат только брекеты, поэтому мы не будем идти над ними.
Вот и все. Вот как наш Дебати Функция работает внутри. Теперь давайте добавим на наш предыдущий пример с самого начала. Мы собираемся создать поле ввода и прикрепить слушатель события с нашими Дебати функционировать как один из его аргументов.
Реальный мир Пример
Во-первых, нам нужно создать поле ввода.
Далее нам нужно создать функцию, которую мы хотим выполнить, когда мы вводим что-то в наше поле ввода.
function helloWorld() {
console.log("Hello World!")
}Наконец, нам нужно выбрать поле ввода, которое мы создали выше и прикрепите keyup Слушатель событий к нему.
const myInput = document.getElementById("myInput");
myInput.addEventListener(
"keyup",
debounce( helloWorld, 2000 )
);Это завершает наш реальный мир пример! Каждый раз, когда мы вводим что-то в наше поле ввода, helloworld будет выполняться, пройдена как минимум на 2 секунды с прошлого года, мы что-то набрали.
Закрытие заметок
Функции DEBOBING представляют собой простые, но мощные функции, которые могут оказать заметное влияние на большинство приложений JavaScript.
Хотя наш пример был веселым и простым, многие крупные организации используют функции Debouting для повышения производительности их приложений.
Если вы хотите узнать больше о JavaScript, проверьте мой сайт! Я работаю на каких-то крутых вещах в https://juanmvega.com Отказ
Оригинал: “https://www.freecodecamp.org/news/debounce-explained-how-to-make-your-javascript-wait-for-your-user-to-finish-typing-2/”