Вы можете изменить форматирование и взглянуть на части обратного вызова.
findSum = (arr, sum) => arr.some(
(set => n => set.has(n) || !set.add(sum - n))
(new Set)
);
Вы найдете две части, одна
(set => n => set.has(n) || !set.add(sum - n))
- это выражение функции, которое возвращает function.
Другая часть является экземпляром Set
(new Set)
, который немедленно вызывает выражение функции (IIFE ( функция немедленного вызова) выражение )) и действует как замыкание над set
.
(set => )
(new Set)
Последняя часть, которая работает как обратный вызов:
n => set.has(n) || !set.add(sum - n)
, которая принимает одно значение из массива, проверяет, находится ли значение в наборе или добавляет дельту к набору. Добавление к Set
возвращает экземпляр и является правдой. Это нежелательно и отменяется, чтобы предотвратить ранний выход из итерации.
const
arr = [3, 6, 7],
sum = 9,
findSum = (arr,sum) => arr.some(
(set => n => set.has(n) || !set.add(sum - n))
(new Set)
);
console.log(findSum(arr, sum));