Eine Closure ist ein Konzept aus der funktionalen Programmierung. Wenn eine Funktion, die freie Variablen verwendet, den Scope verlässt, in dem diese vereinbart sind (meistens, weil sie selbst von einer Funktion zurückgegeben wird), und wird dieser Scope abgeräumt, so wären diese freien Variablen ab diesem Zeitpunkt undefiniert. Um dem zu begegnen, setzt der Compiler bei der Rückgabe eine neue Struktur zusammen. Sie besteht aus dieser Funktion und sämtlichen von ihr verwendeten freien Variablen. Diese Struktur heißt Closure.
Der Name deutet an, dass die betroffenen Variablenbindungen ab diesem Zeitpunkt nicht mehr von außerhalb der Closure erreicht werden können (Es gibt Ausnahmen, falls mehrere Closures gleichzeitig erzeugt werden, s. u.).
Die Closure wird von Laufzeitsystem und Compiler von reinen Funktionen unterschieden. Sie muss auch logisch von diesen unterschieden werden, da sie durch die in ihr enthaltenen (auch: „ge-closure-ten“) Variablenbindungen innere Zustände hat und darum in aufeinanderfolgenden Aufrufen unterschiedliche Werte für gleiche Argumente liefern kann.
Daher kann man eine Closure auch als Objekt ansehen, das in der Regel nur eine Methode hat. Wird die Closure zusammen mit weiteren Closures in demselben Kontext erzeugt, so handelt es sich um ein Objekt mit mehreren Methoden. Die in der Closure eingeschlossenen Variablen aus dem erzeugenden Bereich können von der Closure als Attribute verwendet werden.