Cierres y llamada de función inmediata en JavaScript
Como ya sabes, es posible llamar una función anónima inmediatamente y asignar el resultado a alguna variable:
let result = function() {
return '!';
}();
console.log(result); // mostrará '!'
A menudo, la función que se llama inmediatamente se encierra entre paréntesis, aunque no es necesario. Esto se hace para que sea inmediatamente evidente que la función se llama en el lugar:
let result = (function() {
return '!';
})();
console.log(result); // mostrará '!'
Hagamos ahora que el resultado de la función invocada inmediatamente sea una función anónima:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // mostrará '!'
Hagamos que la función devuelta
almacene en el cierre la variable num:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Si agregamos también num++, la función
func se convertirá en un contador listo:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); // mostrará 1
func(); // mostrará 2
func(); // mostrará 3
func(); // mostrará 4
func(); // mostrará 5
Sin mirar mi código, implemente usted mismo un contador similar.
Modifique el funcionamiento del contador para que
cuente hasta 5, y luego la cuenta comience
de nuevo.