We know that we can only pass a first-class value object as an argument to a method or a function. For example, take this simple method:
def sum(a: Int, b: Int) = a + b
This is a method named sum and declares two parameters a and b. Now, to use this method, we will pass arguments. In the argument list, it's obvious we'll have to pass values of the integer type. It's clear that any type, if it's a value, can be declared as a function parameter and can be used as an argument while calling a function.
In Scala, function literals are nothing more than function trait objects, hence it's obvious that we can declare them as parameters and use them as arguments. This gives rise to functions which contain functions as parameters, ...