DEV Community

mibii
mibii

Posted on • Edited on

Функция обратного вызова

Первая мысль, что это какая-то особенным образом написанная функция, нет.

Функция обратного вызова — это не особая функция, которую нужно писать каким-то специфическим образом. Это, скорее, роль, которую может играть любая функция в контексте других функций.

Суть заключается в следующем:

Есть методы, например, у массивов, такие как map, filter, reduce и другие.
Эти методы для выполнения своей работы нуждаются в логике, которая определяет, что делать с каждым элементом массива.
Эта логика задается с помощью функции, которую нужно передать в метод в качестве аргумента.
Функция, которая передается в метод, и называется функцией обратного вызова.
Почему “обратного”?

Количество вызовов функции обратного вызова зависит от количества элементов в массиве.
Метод как бы “перебирает” все элементы массива и для каждого элемента вызывает функцию обратного вызова.
Пример:

Python

def my_func(x):
  return x * 2
numbers = [1, 2, 3, 4, 5]
# Функция my_func будет вызвана 5 раз, по одному разу для каждого элемента в numbers
result = map(my_func, numbers)
print(result)  # Output: [2, 4, 6, 8, 10]
Enter fullscreen mode Exit fullscreen mode

В этом примере:

my_func – это функция обратного вызова.
map – это метод, который принимает функцию обратного вызова и массив в качестве аргументов.
map перебирает все элементы массива numbers и для каждого элемента вызывает my_func.
my_func возвращает удвоенное значение каждого элемента.
map возвращает массив с результатами вызовов my_func.
Функции обратного вызова — это мощный инструмент, который позволяет упростить код и сделать его более читаемым.

Использование функций обратного вызова:

Делает код более читаемым и понятным.
Позволяет избежать дублирования кода.
Делает код более лаконичным.
Примеры использования функций обратного вызова в NodeJS
Методы массива:
a) map:

JavaScript

const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map((number) => number * 2);
console.log(doubledNumbers); // [2, 4, 6, 8, 10]
Enter fullscreen mode Exit fullscreen mode

В этом примере:

map – метод массива, который применяется к каждому элементу массива и возвращает новый массив.
(number) – функция обратного вызова, которая принимает один аргумент number, представляющий текущий элемент массива.
number * 2 – выражение, которое вычисляет удвоенное значение number.
doubledNumbers – новый массив, содержащий удвоенные значения элементов исходного массива.
b) filter:

JavaScript

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter((number) => number % 2 === 0);
console.log(evenNumbers); // [2, 4]
Enter fullscreen mode Exit fullscreen mode

В этом примере:

filter – метод массива, который применяется к каждому элементу массива и возвращает новый массив, содержащий только те элементы, для которых функция обратного вызова возвращает true.
(number) – функция обратного вызова, которая принимает один аргумент number, представляющий текущий элемент массива.
number % 2 === 0 – выражение, которое проверяет, является ли number четным числом.
evenNumbers – новый массив, содержащий только четные числа из исходного массива.

  1. Map:

JavaScript

const myMap = new Map([
  ['a', 1],
  ['b', 2],
  ['c', 3],
]);
const doubledValues = myMap.forEach((value, key) => {
  console.log(`Ключ: ${key}, значение: ${value}`);
  myMap.set(key, value * 2);
});
console.log(myMap); // Map { 'a' => 2, 'b' => 4, 'c' => 6 }
Enter fullscreen mode Exit fullscreen mode

В этом примере:

forEach – метод объекта Map, который применяется к каждой паре ключ-значение в объекте Map и не возвращает значения.
(value, key) – функция обратного вызова, принимает два аргумента: value – значение, связанное с текущим ключом, и key – текущий ключ.
console.log – используется для отображения информации о текущей паре ключ-значение.
myMap.set(key, value * 2) – используется для обновления значения, связанного с текущим ключом, в два раза.
myMap – объект Map с обновленными значениями.

  1. Set:

JavaScript

const mySet = new Set([1, 2, 3, 4, 5]);
mySet.forEach((value) => {
  console.log(value);
});
// 1
// 2
// 3
// 4
// 5
Enter fullscreen mode Exit fullscreen mode

В этом примере:

forEach – метод объекта Set, который применяется к каждому значению в объекте Set и не возвращает значения.
(value) – функция обратного вызова, которая принимает один аргумент value, представляющий текущее значение в объекте Set.
console.log – используется для отображения значения.
Пример использования функции обратного вызова для indexOf():
JavaScript


const numbers = [1, 2, 3, 4, 5];
const firstEvenIndex = numbers.indexOf((number) => number % 2 === 0);
console.log(firstEvenIndex); // 1
Enter fullscreen mode Exit fullscreen mode

В этом примере:

indexOf – метод массива, который ищет первый элемент, соответствующий заданному условию, и возвращает его индекс.
(number) – функция обратного вызова, которая принимает один аргумент number, представляющий текущий элемент массива.
number % 2 === 0 – выражение, которое проверяет, является ли number четным числом.
firstEvenIndex – переменная, которая хранит индекс первого четного числа в массиве numbers.

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay