Closure scope

Ejemplos:

function outerFunction() {
  let isEnabled = true;
  function getStatus() {
    console.log(isEnabled);
  }
  getStatus(); // imprime true
  isEnabled = false;
  getStatus(); // imprime false
}
outerFunction();
  • Si existiese una colisión con algún nombre de variable con la de un argumento de una función tomará la más cercana por prioridad de scope.

  • Closure scope no puede ser accesible fuera de una función (Provee una encapsulación de un estado privado).

function animal(type) {
  let id = 0;
  return (name) => {
    id += 1;
    return {
      id,
      type,
      name
    };
  };
}
const createDog = animal('dog');
const createCat = animal('cat');
const scott = createDog('Scott');
const firulais = createDog('Firulais');
const fifi = createCat('Fifi');
console.log(scott); // { id: 1, type: 'dog', name: 'Scott' }
console.log(firulais); // { id: 2, type: 'dog', name: 'Firulais' }
console.log(fifi); // { id: 1, type: 'cat', name: 'Fifi' }
  • La función animal tiene una variable id dentro de su scope, y toma el argumento type, y retorna una función con el id, tipo y nombre, ya que tiene acceso al closure scope de la función padre.

  • La función animal se invoca dos veces y es asignado a createDog y createCat. Estas funciones tienen diferentes instancias de closure scope. Los objetos scott y firulais son instanciados por createDog.

El siguiente ejemplo es funcionalmente equivalente y al mismo nivel de composición que los ejemplos de herencia de prototipos:

Otro ejemplo implementando la función prefixer:

Last updated

Was this helpful?