closure
In Scheme, a closure is created when a function, usually
a lambda expression, is passed as a variable. The closure contains
the function’s code plus references to the lexical bindings of the
function’s free variables (i.e., those variables used in the
expression but defined outside it). When this function is applied
to different arguments later, the free variable bindings that were
captured in the closure are used to obtain the values of the free
variables to be used in the calculation. One useful property of
closures is the retention of internal variable values between
invocations, so permitting state to be maintained.