Higher Order Functions and Callbacks – Using “return”

function eitherCallback(callback1, callback2) {
  return (element, i, array) => {return callback1(element, i, array) || callback2(element, i, array)}
}

function filterArray(array, callback) {
 const newArray = [];
 for (let i = 0; i < array.length; i += 1) {
   if (callback(array[i], i, array)) newArray.push(array[i]);
 }
 return newArray;
}
const arrOfNums = [10, 35, 105, 9];

const integerSquareRoot = n => Math.sqrt(n) % 1 === 0; // condition 1 as a function
const over100 = n => n > 100; // condition 2 as a function

const intSqRtOrOver100 = eitherCallback(integerSquareRoot, over100); // function to combine functions

console.log(filterArray(arrOfNums, intSqRtOrOver100)); // should log: [105, 9]

Above is a piece of code that I’ve written for my coding bootcamp prep. However, I am confused on the purpose of the second “return” in the eitherCallback function. I have read the syntax on arrow functions in ES6 and I read that the return is not needed if the function is a single line. However, when I remove that second “return” the output of console.log(filterArray(arrOfNums, intSqRtOrOver100)); returns an empty array.

The eitherCallback function takes two arguments: callback1 and callback2, which are going to be functions integerSquareRoot and over100. When I look at those functions, the return of those two functions are booleans which leads me to my confusion. Since callback1 and callback2 already return booleans, why do I get an empty array if I omit the second “return” in the eitherCallback function?

Thank you.