1. Scala allows functions to be treated as first-class objects. Functions are represented by traits like Function1 that define an apply method.
2. Functions can be passed as arguments to other functions, returned as results, and assigned to variables. This allows for techniques like partial application, currying, and closures.
3. Closures occur when a function references variables from the enclosing scope. The function maintains a reference to those variables even if they are modified later.