Abe Estrada

JavaScript Closures

Closures son expresiones, generalmente funciones, que pueden funcionar con variables establecidas dentro de un contexto determinado. Un closure es la combinación de una función y el entorno léxico dentro del cual esa función fue declarada. Este entorno consiste en cualquier variable local que estuviera en el ámbito de la aplicación en el momento en que se creó el closure.

En ejemplo común

function add(x) {
    return function(y) {
        return x + y;
    };
}

var add5 = add(5);
var add10 = add(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12

En el ejemplo add5 quedaría asi:

function add5(y) {
    return 5 + y;
}

Por lo tanto add5(2) da como resultado 7.

Emulación de métodos privados con closures, la esencia de este patrón es que utiliza una función de autoinvocación para crear un closure, lo que permite tener propiedades y métodos privados y públicos.

Por ejemplo:

var person = function() {
    var name = "Abe"; // Private

    return {
        getName : function() {
            return name;
        },
        setName : function(newName) {
            name = newName;
        }
    };
}();

alert(person.name); // undefined
alert(person.getName()); // "Abe"
person.setName("Abe Estrada");
alert(person.getName()); // "Abe Estrada"

Fuentes: