Functions are the core of Elixir. There are two types: anonymous functions defined with fn/end and named functions defined inside modules. Anonymous functions are closures that can access outer scope bindings. Named functions can be public or private and allow default parameters and pattern matching. Pattern matching selects function clauses by matching argument patterns. Guards extend pattern matching with conditional checks. Functions transform data rather than change it, making Elixir functional.