Создание функции, которая принимает другую функцию в качестве параметра

Я следую примеру пользовательской функции forEach в javascript. Я просто хочу убедиться, что понимаю, что происходит ...

   const myArray = ['red', 'green', 'blue'];

   Array.prototype.myLoop = function(func) {
     for(let i = 0; i < this.length; i++) {
       func(this[i]);  
     }
}

   myArray.myLoop( function(color) {
      console.info(color);
   });

Итак, я понимаю, что делает основная функция - моя путаница заключается в выполнении кода.

Если, например, я ввожу:

   myArray.myLoop(alert)

Он будет предупреждать каждый цвет - обратите внимание, что в этом примере не указан параметр.

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

myArray.myLoop( function(color) {
    console.info(color);
});

Теперь, из первого примера, из того, что я думаю, я понял - 'func' - это параметр, и внутри кода он говорит: «Возьмите все, что передано в качестве аргумента, и используйте данные из массива и выведите это» - (в в этом случае предупреждение)

Во втором примере - анонимная функция передается - и внутри кода она говорит:

func(this[i]);

Итак, в этом примере функции 'func' передается параметр 'this [i]', который указывает на текущий элемент массива. Итак, в основном функция ожидает аргумент, поэтому вы должны включить «цвет» в анонимную функцию - «цвет» - это имя-заполнитель для текущего элемента массива.

Я просто все еще не понимаю, почему вам нужны аргументы в пользу раздражающей функции, а не «предупреждения» - пример:

myArray.myLoop(alert(color));

Может ли кто-нибудь пролить свет на то, что происходит. В чем разница между двумя примерами? Почему параметр для одного, а не для другого?

Заранее спасибо.

Поведение ключевого слова "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
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
myArray.myLoop(alert)

alert - это существующая, определенная функция, которую вы передаете как обратный вызов myLoop.

myArray.myLoop(function (color) {
    console.info(color);
});

Здесь function ... - это анонимная функция, которую вы определяете на лету. Это эквивалентно:

var f = function (color) {
    console.info(color);
};

myArray.myLoop(f);

В этот момент, как видите, нет никакой разницы в том, как вы передаете alert. f - это функция, которая принимает один параметр; function (color) { ... } - это функция, которая принимает один параметр.

f(a)звонки функция с аргументом.
function (p) { ... }определяет функция с параметром (который вы можете позже вызвать).

Итак, просто чтобы уточнить - внутренняя «функция» - это анонимная функция, которая выполняется? func ожидает аргумента. Вот почему вы должны включить 'color' ... внутри этой анонимной функции мы console.info 'this [i]' - так что внутренняя 'func' является заполнителем для внешней анонимной функции ...?

WoodenChops 01.06.2018 16:53

Функции также являются «просто значениями», которые вы можете передавать. myLoop(5) передает значение 5. myLoop(alert) передает функцию alert. myLoop(function (i) { ... }) также передает функцию. Вы можете назначать функции переменным. Так же, как вы можете назначить 5 переменной или параметру, вы можете назначить function (i) { ... } переменной или параметру. Единственная разница между 5 и function (i) { ... } заключается в том, что вы можете использовать вызов «значения функции», то есть func(). Не может этого сделать, если func - это 5, но если func - это function () { ... }, вы можете.

deceze 01.06.2018 16:58

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