(Clausuras o funciones de cierre)

<aside> 📌 Todo en JavaScript es un objeto.

</aside>

Un closure es la combinación entre una función y el ámbito léxico en el que esta fue declarada. Con esto, la función recuerda el ámbito en el que se creó. La mejor forma de entender un closure es por medio de un ejemplo práctico.

var myVar = 'hi';
function myFunction() {
	console.log(myVar);
}
myFuntion(); // hi

Los closures son básicamente cuando aprovechamos la habilidad de JavaScript de usar las variables que están en el scope padre de nuestro bloque de código, por eso el global scope es un closure grandote; el bloque myFunction puede usar TODAS las variables que están disponibles en el bloque inmediato anterior.

Los Closures se usaban bastante como las clases antes de ES6, ya que es una manera de mantener variables casi privadas. Qué no se pueda acceder a ellas por fuera.

Variables privadas con Closures

JS por su naturaleza no fomenta el uso de datos privados pero por medio de los Closures podemos crear valores que solo puedan ser accedidos por medio de métodos, que no van a estar disponibles fuera de esta función.

const person = () => {
    var savedName = 'Wade';

    return {
        getName: () => {
            return savedName;
        },
        setName: (name) => {
            savedName = name;
        },
    };
};

let newPerson = person();
console.log(newPerson.getName());
newPerson.setName('Ricardo');
console.log(newPerson.getName());

Loops

En un loop nunca ocupar var, siempre utilizar let para valores que irán cambiando dentro de la ejecución del scope. de lo contrario se genera un closure dentro del ciclo.

MATERIAL EXTRA

21. CLAUSURAS (Closures) EN JAVASCRIPT

Ejemplos Completos de Closures

closures-y-scopes-con-Javascript/src/closure at main · Ricar8o/closures-y-scopes-con-Javascript