JavaScript
  • 🧑‍💻Full-Stack Web Developer
  • 📚Теорія
    • 1️⃣Змінні і типи
      • Знайомство з JavaScript
      • Інструменти розробника
      • Підключення скрипту
      • Основи синтаксису
      • Змінні і типи
      • Взаємодія з користувачем
      • Основні оператори
      • Числа
      • Рядки
      • Логічні операції
    • 2️⃣Розгалудження і цикли
      • Розгалуження
      • Тернарний оператор
      • Інструкція switch
      • Область видимості
      • Цикли
    • 3️⃣Масиви
      • Масиви
      • Ітерація по масиву
      • Присвоєння за посиланням і значенням
      • Методи масиву
    • 4️⃣Функції
      • Функції
      • Стек викликів
    • 5️⃣Обʼєкти
      • Обʼєкти
      • Перебирання обʼєкта
      • Масив обʼєктів
      • Операції spread і rest
      • Деструктуризація обʼєктів
      • Деструктуризація масивів
      • Паттерн "обʼєкт параметрів"
    • 6️⃣Колбек-функції, стрілкові функції, перебір масиву
      • Колбек-функції
      • Метод forEach
      • Стрілкові функції
      • Підходи до написання коду
      • Чисті функції
    • 7️⃣Перебираючі методи масивів
      • Перебираючі методи масиву
      • Метод map()
      • Метод flatMap()
      • Метод filter()
      • Метод find()
      • Метод findIndex()
      • Методи every() і some()
      • Метод reduce()
      • Метод sort()
      • Ланцюжки методів
    • 8️⃣Контекст, прототипи та класи
      • Контекст виконання функції
      • Правила визначення this
      • Методи функцій
      • Об'єктно-орієнтоване програмування
      • Прототипне наслідування
    • Класи
  • 👷Практика
    • 👷Практика
    • Page 1
  • Про мене
    • Про мене
Powered by GitBook
On this page
  • Інлайн колбеки
  • Декілька колбеків
  • Абстрагування повторення
  1. Теорія
  2. Колбек-функції, стрілкові функції, перебір масиву

Колбек-функції

PreviousКолбек-функції, стрілкові функції, перебір масивуNextМетод forEach

Last updated 1 year ago

Функції - це спеціальний тип даних (об'єкт вищого порядку). Функцію можна зберігати у змінній або передавати у якості аргументу в іншу функцію.

У наступному прикладі: у першому console.log ми вказуємо функцію з круглили дужками і отримуємо результат виконання функції. У другому console.log ми вказуємо функцію без круглих дужок і виводимо в консолі посилання на саму функцію. Тобто функцію можна присвоїти змінній.

function myFunc() {
  return "Hello";
}

console.log(myFunc());

console.log(myFunc);

Колбек-функція (callback function) - це функція, яка передається в іншу функцію як аргумент. Ця передана функція буде викликана або "зворотно викликана" у певному контексті або після завершення певної операції.

Функція вищого порядку (higher order function) - функція, яка приймає у якості параметрів інші функції або повертає функцію у якості результату.

Розглянемо далі приклад використання колбек функцій:

  • У нас є дві функції greeting і goodbye, які приймають рядок і виводять повідомлення вітання і прощання.

  • Також у нас є функція myFunc, яка в якості аргумента приймає колбек функцію і рядок.

  • Тепер, щоб вивести те чи інше повідомлення достатньо викликати нашу функцію myFunc і передати в неї назву функції повідомлення (посилання на функцію) і імʼя у якості рядка.

// 1 greeting callback function
function greeting(name) {
  console.log(`Hello, ${name}!`);
}

// 2 goodbye callback function
function goodbye(name) {
  console.log(`Good Bye, ${name}!`);
}

// Higher order function
function myFunc(callback, name) {
  callback(name);
}

// Виклик функції вищого порядку і передача колбек-функції і рядка
myFunc(greeting, "Sashko"); // Hello, Sashko!
myFunc(goodbye, "Sashko"); // Good Bye, Sashko!

Ми передали посилання на функції greeting і goodbye як аргумент, тому вона буде присвоєна в параметр callback і викликана всередині функції myFunc за допомогою круглих дужок. Ім'я параметра для колбека може бути довільним, головне пам'ятати, що значенням буде функція.

Інлайн колбеки

Інлайн колбеки - це колбек-функції, які оголошуються безпосередньо в місці свого використання, без попереднього оголошення окремих функцій.

Це дозволяє визначити та використовувати колбек-функції прямо там, де вони потрібні, що може спростити код та зробити його більш читабельним, особливо у випадках, коли функція використовується лише в одному місці.

// Higher order function
function myFunc(callback, name) {
  callback(name);
}

// Виклик функції вищого порядку і передача інлайн колбек-функції і рядка
myFunc(function (name) {
  console.log(`Hello, ${name}!`);
}, "Sashko"); // Hello, Sashko!

Декілька колбеків

У JavaScript можна передавати декілька колбек-функцій у функцію або метод як аргументи. Це може бути корисним, коли вам потрібно виконати різні операції у різних контекстах або обробити різні події одночасно.

Далі наведемо приклад перевірки доступу користувача до якогось сервісу. Імітувати дозволеність будемо за допомогою автогенератора випадкових чисел random. При виклику функції передаватимемо імʼя, а також дві колбек-функції, які оброблятимуть ситуацію в разі дозволу і відмови доступу.

Різні виклики функції будуть давати різні результати.

// Колбек дозволу доступу
function approve(name) {
  console.log(`Вітаю! Вхід для ${name} дозволено!`);
}

// Колбек заборони доступу
function reject(name) {
  console.log(`На жаль! Вхід для ${name} заборонено!`);
}

// Функція вищого порядку, приймає рядок імені і дві колбек-функції
// Перша надаватиме доступ, а друга заборонятиме доступ
function myFunc(name, good, bad) {
  // імітація перевірки доступу користувача до сервісів
  let isAllowed = Math.random() >= 0.5;
  
  // Якщо дозволено доступ, то використовуємо першу колбек функцію
  if (isAllowed) {
    good(name);
    return;
  }

  // Якщо заборонено доступ, то використовуємо другу колбек функцію
  bad(name);
}

// Виклик функції вищого порядку і передача рядка і двох колбек-функцій
myFunc("Sashko", approve, reject); // Результат задежить від того, що згенерується в isAllowed

Такий підхід дозволяє оброблювати результати перевірки в окремих функціях, а не описувати все всередині однієї функції. Колбеки використовують для обробки дій користувача на сторінці, на момент обробки запитів на сервер, виконання заздалегідь невідомих функцій тощо. У цьому і полягає їх суть - це функції, призначені для відкладеного виконання.

Абстрагування повторення

Абстракція - це приховування деталей реалізації. Функції - це чудовий спосіб побудови абстракцій, коли весь процес прихований, а ми отримуємо результат виконання операції.

Так само можна створити абстрактне повторення. Написати функцію, яка приймає колбек і виконує її вказану кількість разів.

// callback greeting function
function greeting(name) {
  console.log(`Hello, ${name}!`);
}

//  Higher order function
function multiGreeting(name, callback, number) {
  for (let i = 0; i < number; i += 1) {
    callback(name);
  }
}

multiGreeting("Alex", greeting, 6);

Якби не абстаргування повторення, нам би доведося шість разів викликати функцію.

greeting("Alex");

📚
6️⃣