Función que retorna una función en JavaScript
Supongamos que tenemos una función que retorna una cadena de texto:
function func() {
return '!';
}
let result = func();
console.log(result); // mostrará '!'
Ahora, por analogía, en lugar de una cadena, retornemos una función anónima:
function func() {
return function() {
return '!';
};
}
let result = func(); // la variable result será una función
console.log(result); // mostrará 'function() {return '!';}'
Como puedes ver, la variable result ahora
representa una función. Mostremos en la consola
el resultado de su ejecución. Para ello, escribamos
paréntesis después de ella:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // mostrará '!'
Dado que la llamada func() retorna una función,
podemos llamar inmediatamente a esta función retornada,
de esta manera: func()() - los primeros
paréntesis obtienen el resultado de la función
func (que en sí mismo es una función),
y los segundos paréntesis se aplican al resultado de
func.
Intentémoslo:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // mostrará '!'
Crea una función func1 que, al ser
llamada así: func1()(), retorne
el número 1. Crea una función similar
func2, que retorne el número 2.
Encuentra la suma de los resultados de estas funciones.