Объясните пример с обратным вызовом (функция жирной стрелки) в качестве аргумента функции

Я прохожу курс Udemy ES6 Javascript: The Complete Developer's Guide Stephen Grider самостоятельно. Большинство первых 4 разделов были слишком простыми, поэтому я выполнял все упражнения с функциями жирных стрелок (которые для меня в новинку и пока не рассматривались в курсе), чтобы сделать их более интересными.

Однако когда я добрался до Coding Exercise 8: Challenging! Implementing 'reject', я не мог понять, как это сделать с помощью жирных стрелочных функций.

Задача состоит в том, чтобы создать функцию под названием «отклонить», которая работает противоположно Array.filter. Концептуально это просто - просто используйте !.

Оказавшись в тупике, я нашел предлагаемое решение с использованием функций жирных стрелок, которое работает. Вот:

const numbers = [10, 20, 30];

function reject(array, iteratorFunction) {
    return array.filter(arrItem => !iteratorFunction(arrItem))

}
reject(numbers, num => num > 15);

Я не понимаю этого. Может кто-нибудь объяснить, что здесь происходит? Кроме того, есть ли лучшая реализация с использованием функций жирных стрелок?

Что именно не вы понимаете?

deceze 09.01.2019 07:51

Вы передаете для отклонения в качестве второго аргумента абстрактную функцию «num => num <15», поэтому эта «! IteratorFunction (arrItem))» вызывает ее

Álvaro Touzón 09.01.2019 08:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
477
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

num => num> 15 переводится в следующую анонимную функцию

function(num){
  return num > 15
}

Если у вас только один аргумент, вам не нужно использовать круглые скобки, а если вы возвращаете выражение, вы можете пропустить фигурные скобки и написать «return»

После того, как синтаксис функции ясен, нужно просто передать функцию в качестве аргумента для отклонения и предоставить значения массива в качестве аргумента анонимной функции.

Ответ принят как подходящий

Чтобы понять пример, нужно знать и использовать функции обратного вызова, анонимные функции и синтаксис стрелок.

Рассмотрим код:

function reject(array, iteratorFunction) {
    return array.filter(arrItem => !iteratorFunction(arrItem));
}

Определение массива filter: метод filter() создает новый массив со всеми элементами, которые проходят проверку, реализованную предоставленной функцией обратного вызова.

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

Следующий код - это функция обратного вызова: arrItem => !iteratorFunction(arrItem) Функция возвращает логическое значение. Функция написана в виде стрелочного синтаксиса.

Это также можно записать как:

function(arrItem) {
    return !iteratorFunction(arrItem);
}

iteratorFunction также является функцией обратного вызова, которая возвращает логическое значение. Символ '!' Оператор отменяет возвращаемое логическое значение (превращает истину в ложь и наоборот).

Итак, следующий код функции reject работает аналогично:

function reject(array, iteratorFunction) {
    return array.filter(function(arrItem) {
                            return !iteratorFunction(arrItem);
    });
}

-следующее такое же, как указано выше-

function reject(array, iteratorFunction) {

    let myCallback = function(arrItem) {
                         return !iteratorFunction(arrItem);
                     };

    return array.filter(myCallback);
}


iteratorFunction - функция обратного вызова

В примере рассмотрим этот код: num => num > 15

Код представляет собой стрелочный синтаксис функции обратного вызова. Это также можно записать как:

function(num) {
    return num > 15;
}

Это означает код:

let result = reject(numbers, num => num > 15);

-можно также записать как-

let result = reject(numbers, function(num) {return num > 15});

-можно также записать как-

let myCallback = function(num) {
    return num > 15;
}

let result = reject(numbers, myCallback);

Результат: [ 10 ]

Другие вопросы по теме