Expresiones de función nombradas en JavaScript
Supongamos que tenemos una expresión de función como esta:
let test = function() {
console.log('!');
};
test(); // mostrará '!'
Démosle a nuestra función el nombre func:
let test = function func() {
console.log('!');
};
test();
Como ya sabes, no se puede acceder a la función por este nombre:
let test = function func() {
console.log('!');
};
test(); // mostrará '!'
func(); // dará un error
¿Por qué darle un nombre a la función si no estará disponible? El caso es que este nombre no estará disponible fuera de la función, pero sí está disponible dentro de ella.
Comprobemos:
let test = function func() {
console.log(func); // la función mostrará su propio código fuente
};
test(); // llamamos a la función
Llamemos a nuestra función dentro de sí misma:
let test = function func() {
console.log('!'); // mostramos '!'
func(); // nos llamamos a nosotros mismos
};
test();
Si ejecutas este código, se mostrará en la consola una cantidad infinita de mensajes.
En realidad, nuestra función puede ser llamada
dentro de sí misma no solo como func, sino
también como test:
let test = function func() {
console.log('!');
test(); // nos llamamos a nosotros mismos
};
test();
¿Cuál es la diferencia? La diferencia es que el nombre
test es simplemente una variable. Durante
la ejecución del script, nuestra función puede asignarse
a otra variable o pasarse como parámetro
- en este caso, la conexión entre la variable test
y la función puede perderse.
El nombre func, en cambio, está vinculado
directamente a la función
específicamente para que se pueda acceder
a nuestra función dentro de sí misma.
Este tipo de Function Expression con nombre de función se denominan expresiones de función nombradas.