Я следую примеру пользовательской функции 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));
Может ли кто-нибудь пролить свет на то, что происходит. В чем разница между двумя примерами? Почему параметр для одного, а не для другого?
Заранее спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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) { ... }определяет функция с параметром (который вы можете позже вызвать).
Функции также являются «просто значениями», которые вы можете передавать. myLoop(5) передает значение 5. myLoop(alert) передает функцию alert. myLoop(function (i) { ... }) также передает функцию. Вы можете назначать функции переменным. Так же, как вы можете назначить 5 переменной или параметру, вы можете назначить function (i) { ... } переменной или параметру. Единственная разница между 5 и function (i) { ... } заключается в том, что вы можете использовать вызов «значения функции», то есть func(). Не может этого сделать, если func - это 5, но если func - это function () { ... }, вы можете.
Итак, просто чтобы уточнить - внутренняя «функция» - это анонимная функция, которая выполняется? func ожидает аргумента. Вот почему вы должны включить 'color' ... внутри этой анонимной функции мы console.info 'this [i]' - так что внутренняя 'func' является заполнителем для внешней анонимной функции ...?