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?
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ónIncreaseCounter
que es devuelta por la IIFE. Sin embargo,incrementer
no es la variable que está siendo incrementada, sino simplemente una referencia a la funciónIncreaseCounter
.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:Este código crea un objeto con dos propiedades:
value
(inicializada en 0) yincrement
, un método que incrementa la propiedadvalue
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.