es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Asignación del valor de cierre a una variable ‘Weird JS’

En resumen, tengo el siguiente código:

let incrementer = (function() {
let counter = 0;

let IncreaseCounter = () => {
return counter += 5;
}
return IncreaseCounter;
})();

console.log(incrementer); // cuerpo de función () => {}
console.log(incrementer()) // 5
console.log(incrementer()) // 10
console.log(incrementer()) // 15

incrementer no funciona a pesar de que estaba envuelto en un IIFE.

¿Hay alguna manera de imprimir incrementer como una variable que se pueda incrementar cada vez, sin la invocación de ()?

¿Existe alguna otra forma en JavaScript de lograr este objetivo además del enfoque de closure?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código de arriba está utilizando una IIFE (Expresión de Función Invocada Inmediatamente) para crear un cierre alrededor de la variable counter, que está siendo accedida y modificada por la función IncreaseCounter que es devuelta por la IIFE. Sin embargo, incrementer no es la variable que está siendo incrementada, sino simplemente una referencia a la función IncreaseCounter.

    Para imprimir incrementer como una variable que pueda ser incrementada, se podría modificar la IIFE para que devuelva un objeto con un método que incremente y devuelva una variable:

    let incrementer = (function() {
      let counter = 0;
    
      let obj = {
        value: counter,
        increment: function() {
          return obj.value += 5;
        }
      }
      return obj;
    })();
    
    console.log(incrementer); // { value: 0, increment: [Function: increment] }
    console.log(incrementer.value); // 0
    console.log(incrementer.increment()); // 5
    console.log(incrementer.increment()); // 10
    console.log(incrementer.increment()); // 15
    console.log(incrementer.value); // 15
    

    Este código crea un objeto con dos propiedades: value (inicializada en 0) y increment, un método que incrementa la propiedad value en 5 y la devuelve. incrementer ahora se refiere a este objeto, y se puede acceder y modificar sus propiedades directamente.

    Hay otras formas de lograr el mismo objetivo en JavaScript, pero los cierres son una herramienta común y poderosa que se puede usar en muchas situaciones.

Comments are closed.