Функции можно передавать параметрами в другие функции. Такие функции-параметры называются коллбэками (англ. callback). Давайте посмотрим работу с ними на примере.
Пусть мы хотим сделать функцию, которая первым параметром будет принимать массив, а вторым - коллбэк, который будет применять к каждому элементу массива:
function each(arr, callback) {
// тут какой-то код
}
Напишем реализацию нашей функции:
function each(arr, callback) {
let result = [];
for (let elem of arr) {
result.push( callback(elem) ); // вызываем функцию-коллбэк
}
return result;
}
Наша функция each
- универсальная.
Это значит, что мы можем передавать в нее
различные коллбэки, выполняя разные операции
над массивами. При этом код нашей функции останется
неизменным - будут меняться только
передаваемые коллбэки.
Давайте для примера с помощью нашей функции возведем в квадрат каждый элемент какого-нибудь массива. Для этого передадим параметром соответствующий коллбэк:
let result = each([1, 2, 3, 4, 5], function(num) {
return num ** 2;
});
console.log(result);
А теперь возведем элементы массива в куб. Для этого в качестве параметра передадим уже другой коллбэк, выполняющий эту операцию:
let result = each([1, 2, 3, 4, 5], function(num) {
return num ** 3;
});
console.log(result);
Дан массив с числами. С помощью созданной
нами функции each
увеличьте каждый
элемент в два раза.
Дан массив со строками. С помощью созданной
нами функции each
переверните символы
каждой строки в обратном порядке.
Дан массив со строками. С помощью созданной
нами функции each
сделайте заглавным
первый символ каждой строки.
Нюансы
Коллбэки не обязательно должны быть анонимными функциями. Пусть для примера у нас есть следующая функция:
function square(num) {
return num ** 2;
}
Давайте с ее помощью возведем каждый элемент массива в квадрат:
function square(num) {
return num * num;
}
let result = each([1, 2, 3, 4, 5], square);
console.log(result);
С помощью следующей функции возведите все элементы массива в куб:
function cube(num) {
return num ** 3;
}