Las funciones en JavaScript agrupan instrucciones que puedes reutilizar. Reciben valores mediante parámetros y pueden devolver un resultado con return. Definir una función no ejecuta su cuerpo: necesitas llamarla.
function saludar(nombre) {
return "Hola, " + nombre;
}
console.log(saludar("Ana")); // Hola, AnaNombre es el parámetro y «Ana» es el argumento de esa llamada. Comprender esta diferencia evita depender de variables globales y facilita probar el comportamiento.
Ejemplo práctico: calcular un precio con descuento
function calcularPrecio(precio, descuento = 0) {
if (!Number.isFinite(precio) || !Number.isFinite(descuento)) {
throw new TypeError("Precio y descuento deben ser números finitos");
}
if (precio < 0 || descuento < 0 || descuento > 100) {
throw new RangeError("Valores fuera de rango");
}
return precio * (1 - descuento / 100);
}
console.log(calcularPrecio(80, 25)); // 60
console.log(calcularPrecio(80)); // 80El parámetro predeterminado se utiliza si el argumento falta o es undefined. No sustituye automáticamente a null. El ejemplo rechaza cadenas como "80": si el dato viene de un formulario, conviértelo y valida el resultado antes de usarlo.
Return no es lo mismo que console.log
Console.log muestra información en la consola. Return entrega un valor a quien llamó la función y termina ese recorrido de ejecución. Una función sin retorno explícito devuelve undefined.
function duplicar(numero) {
return numero * 2;
}
const resultado = duplicar(5);
console.log(resultado + 1); // 11Si solo imprimieras el doble dentro de la función, no tendrías ese número como resultado de la llamada para seguir calculando.
Expresión de función y función flecha
const sumar = function (a, b) {
return a + b;
};
const multiplicar = (a, b) => a * b;
const crearUsuario = nombre => ({ nombre });
console.log(sumar(2, 3)); // 5
console.log(multiplicar(2, 3)); // 6
console.log(crearUsuario("Ana")); // { nombre: "Ana" }Una flecha con expresión devuelve su resultado implícitamente. Si abres un bloque con llaves, escribe return cuando quieras devolver un valor. Los paréntesis alrededor de un objeto permiten distinguirlo de un bloque.
Cuándo no sustituir una función por una flecha
Las flechas no tienen su propio this ni arguments y no pueden utilizarse como constructor con new. Son útiles para muchas funciones pequeñas y callbacks, pero no son un reemplazo universal de function.
Una declaración de función puede llamarse antes de su posición textual en determinados contextos habituales. Una expresión almacenada en const no puede utilizarse antes de que esa variable esté inicializada.
Errores frecuentes
- Olvidar los paréntesis al querer ejecutar una función.
- Confundir pasar una función como callback con invocarla inmediatamente.
- Escribir un salto de línea después de return y devolver undefined por inserción automática de punto y coma.
- Depender de datos externos cuando podrías recibirlos como argumentos.
Preguntas frecuentes
¿Una función puede devolver varios datos?
Sí, devolviendo un objeto o un array que los agrupe.
¿Los parámetros siempre son obligatorios?
No. Los argumentos ausentes suelen producir undefined salvo que definas valores predeterminados u otra lógica.
Practica extrayendo un cálculo de tu código a una función. Puedes aplicar la idea a una calculadora con JavaScript.
Referencia técnica: documentación de MDN.




