Closures are expressions, typically functions, that have access to variables from an enclosing scope even after the scope has closed. Closures are created when a function is defined inside another function and the inner function is returned, preserving its access to variables in the outer function's scope. They allow protecting variables, keeping references for delayed execution, and implementing design patterns like the singleton.