Как выполняется проверка if через параметры?
У меня есть вот такой код самостоятельной реализации метода filter, но я совсем не понимаю как внутри if мы в параметр fn, передаем elem и выполняем проверку.
Каким образом fn(elem) понимает с чем сравнивать?
const filterThis = [2, 4, 3, 6, 8, 9];
const filter = (arr, fn) => {
const filteredArr = [];
for (let elem of arr) {
if (fn(elem)) filteredArr.push(elem);
}
return filteredArr;
}
console.log(filter(filterThis, (elem) => elem % 3 == 0))
Ответы (1 шт):
По факту получается так. С простого. Сама анонимная функция может быть записана так:
function test(elem) {
if (elem % 3 == 0)
return true;
return false;
}
внутри filter происходит вызов этой функции, переданной по ссылке и передаётся аргумент elem
В целом, если пока без ссылки, то получается вот так:
const filter = (arr) => {
...
if (test(elem))
...
}
если с ссылкой
const filter = (arr, ЛЮБАЯ_ФУНКЦИЯ) => {
...
if (ЛЮБАЯ_ФУНКЦИЯ(elem))
...
}
filter(filterThis, test);
Дальше, просто т.к. это стрелочная функция, считайте, что ей произвольно задаётся имя (не важно как), сохраняется в глобальном скоупе и передаётся оно как аргумент функции. Считайте, что в данном случае вот это
(elem) => elem % 3 == 0
сохранилось как function test(elem) и test передался как аргумент в filter