В этом примере, который вы опубликовали, у вас есть функция, определенная внутри функции. Таким образом, эта функция (isInSecondArray()
) может выполняться только внутри функции justcoolStuff()
.
Итак, в последней строке, когда мы запускаем функцию justCoolStuff
с myStuff
, переданным в качестве первого массива, и coolStuff
передается в качестве второго массива, происходит следующее:
- функция
isInSecondArray
определена и настроена так, что она готова к выполнению, если она будет вызвана - затем мы запускаем метод фильтрации для
firstArray
, передавая метод isInSecondArray
(определенный ранее в функции) в качестве аргумента.
filter
- это метод JS, который работает с Массивы. Чтобы использовать его, вы передаете ему функцию обратного вызова. См. документацию MDN для хорошего простого примера, который использует стрелочную функцию.
Таким образом, filter выполняет итерацию по элементам в myStuff
(поскольку это первый из двух переданных массивов) . Для каждого элемента в myStuff
запускается функция isInSecondArray
. isInSecondArray
выполняет итерацию по всем элементам в secondArray
, и если один из них совпадает с элементом myStuff
, который мы проверяем, тогда он возвращает true.
Когда функция обратного вызова передана в filter
возвращает истину, тогда этот элемент может быть возвращен как часть окончательного массива / объекта. Когда функция обратного вызова (например, isInSecondArray
) возвращает false, этот элемент не возвращается как часть окончательного массива / объекта.
Надеюсь, это понятно. Здесь важно знать, что filter
принимает функцию (обратного вызова) и в зависимости от того, что возвращает функция обратного вызова, будет определять, какие значения будут выводиться как часть окончательного возвращенного массива.