A function that receives another function as an argument or that returns a new function or both is called a Higher-order function. Higher-order functions are only possible because of the First-class function.