Funciones
Hasta ahora has escrito código que se ejecuta de arriba abajo, una vez. Las funciones son la herramienta para empaquetar un bloque de código con nombre y reutilizarlo cuantas veces quieras, con datos distintos cada vez — la base de literalmente cualquier programa serio en JavaScript.
Tres formas de escribir una función
function saludar(nombre) { return 'Hola ' + nombre; } — la forma clásica, con nombre propio.
const saludar = function(nombre) { ... }; — una función guardada en una variable, sin nombre propio.
const saludar = (nombre) => { ... }; — la forma moderna y más corta, muy habitual en código actual.
Cuando una arrow function solo tiene una línea que devuelve un valor, puedes
quitar las llaves y el return — se llama
"retorno implícito":
const doble = (n) => n * 2; — exactamente equivalente a (n) => { return n * 2; }, pero más corto.
Parámetros, argumentos y valores por defecto
Un parámetro es el nombre que usa la función internamente; un argumento es el valor real que le pasas al llamarla. Puedes darle un valor por defecto a un parámetro por si no le pasan nada:
Olvidar el return. Sin él, una función siempre
devuelve undefined, aunque internamente calcule
el resultado correcto — el valor simplemente nunca sale de la función.
Funciones como valores
En JavaScript, una función es un valor como cualquier otro: la puedes guardar
en una variable, pasarla como argumento a otra función, o devolverla desde
otra función. Esto es lo que hace posible métodos como
.map() o .filter()
que verás en el módulo de arrays — reciben una función como argumento:
A una función que recibe otra función como argumento (como
ejecutarDosVeces arriba) se la suele llamar
"función de orden superior". No necesitas memorizar el término, pero lo vas
a ver constantemente si sigues aprendiendo JavaScript después de este curso.
Comprueba lo que has aprendido
1. Si una función no tiene return, ¿qué devuelve al llamarla?
2. ¿Qué hace `cantidad = 1` como parámetro de una función?
3. ¿Qué significa que las funciones sean "valores" en JavaScript?