Closures in programming languages typically consist of three parts:
1. Function: The inner function that is defined inside another function and has access to the variables and parameters of its outer function.
2. Environment: The environment or lexical scope in which the inner function is defined. It includes all the variables, parameters, and functions that were in scope at the time of the closure's creation.
3. Reference: A reference to the inner function, which allows it to be invoked or accessed from outside its original scope. This reference keeps the environment alive even after the outer function has finished executing.