трюк в том, что функция
inArray()
возвращает ... ещё одну функцию, которую только что создала при вызове:
function inArray(arr) {
const result = function(x) {
// внутри этой функции будет ещё и доступен
// arr, с которым вызвали inArray()
return arr.includes(x);
};
return result;
}
Т.е. вызов
inArray()
с каким-то массивом возвращает всего лишь ещё одну функцию, которая принимает любой аргумент, но ещё и «запомнила» конкретный
arr
, с которым её создали.
В вашем примере создаётся функция с массивом:
const myFilter = inArray([1, 2, 10]);
это свежесозданная функция, которая для любого аргумента возвращает true/false — есть ли это же значение в массиве
[1, 2, 10]