Una clausura es una función evaluada en un entorno que contiene una o más variables dependientes de otro entorno, cuando es llamada, la función puede acceder a esas variables.
1 2 3 4 5 6 7 8 |
function Nuevo-Contador ($incremento=1) { $contador=0 { $script:contador += $incremento $contador }.GetNewClosure() } |
Una clausura puede usarse para asociar una función con un conjunto de variables «privadas», que persisten en las invocaciones a la función. El ámbito de la variable abarca sólo al de la función definida en la clausura, por lo que no puede ser accedida por otro código del programa. No obstante, la variable mantiene su valor de forma indefinida, por lo que un valor establecido en una invocación permanece disponible para la siguiente. Como consecuencia, las clausuras pueden ser usadas para esconder estados e implementar programación orientada a objetos.
1 2 3 4 5 6 7 8 9 |
$var1 = Nuevo-Contador #Incremento normal & $var1 & $var1 $var2 = Nuevo-Contador 2 #Incremento con un nuevo contador & $var2 & $var2 |